2014-07-11 8 views
2

我開始實施一個大型程序。但是我遇到了一個大問題。所以這裏是我的程序非常簡化的代碼。我有一個單獨的.c文件,用於我的功能,它是normal.c主程序是main.c和我已經鏈接這兩個與cal.h頭文件。C - 未鏈接文件引用功能錯誤

的main.c

#include <stdio.h> 
#include "cal.h" 

void main() 
{ 
    int num1, num2, ans; 
    num1=5; 
    num2=5; 
    ans=add(num1, num2); 
    printf("%d" ,ans); 
} 

normal.c

#include "cal.h" 

int add(int num1, int num2) 
{ 
    return num1+num2; 
} 

cal.h

#ifndef CAL_H_INCLUDED 
#define CAL_H_INCLUDED 
#include <errno.h> 

int add(int num1, int num2); 

#endif // CAL_H_INCLUDED 

但是當我編譯此,它給出了錯誤 .. \ main.c | 10 |對'add'|的未定義引用

我在Windows 8.1中使用CodeBlocks v.13.12任何回答這個問題都非常感謝。我也嘗試過使用CodeLite,但同樣的錯誤發生。謝謝!

+4

當你鏈接的文件,你有'normal.o'? – Barmar

+0

不,我沒有。我很抱歉,因爲我是C新手,我不知道如何處理'.o'文件。解釋將是一個很大的幫助! –

+2

我不能說CodeBlocks是如何工作的,但這裏一般是C編譯的工作原理。每個.c文件分別*編譯*到一個.o文件(一個「目標文件」)。所以你的main.c將被編譯爲main.o,並且normal.c將被編譯爲normal.o。這些都不可執行,並且不是完整的程序。 然後,兩個目標文件鏈接在一起。在這種情況下,「鏈接」是一個技術術語,與您的使用不同 - 這是鏈接器執行的一個步驟。鏈接器生成您的實際可執行文件。 通常,IDE會自動鏈接同一項目中的任何.c文件。 – EvanED

回答

0

代碼塊有自動鏈接,但爲此您需要將源文件和頭文件放在項目下。

當我製作單獨的.c & .h文件時,我遇到了同樣的問題,並且希望IDE鏈接目標文件但失敗。我把它們放在一個項目下,它工作!

0

使用完整的代碼編譯。 如果你的c codefiles main.c中和normal.c在./src和頭文件cal.h是在./inc按照下列從當前目錄方法(。)

克++ ./src/main.c ./src/normal.c -I ./inc -o main

現在主要是執行二進制文件。

2

代碼編譯完成後在Ubuntu終端 需要使用下面的

gcc normal.c main.c -o out -lm