2013-04-01 121 views
0

我看過這些鏈接:This oneThis 和其他幾個類似的。 這裏給出的答案都沒有工作方法正在工作。源文件找不到頭文件

我有兩個源文件a1.c,a2.c和兩個頭文件a1.ha2.h。我想在這兩個文件中的頭文件(在a1.c和a2.c是有功能的,我需要從a2.c使用)

我已經在包括

#include "a1.h" 
#include "a2.h" 

源文件a1.c

我在Ubuntu上使用GCC。並使用命令gcc a1.h -o a1.out -lm ,並沒有奏效。

gcc -c -I/Home/Documents/ctests/ a1.c -o a1.out 

嘗試以及

gcc -c a1.c -I/Home/Documents/ctests/ -o a1.out 

我的拼寫都還好,以及(有幾乎沒有任何閃失有一個字母和數字作爲文件名反正)。

另外,所有文件都在同一個文件夾中。

我知道這可能是一個微不足道的問題,但我卡在這一個,並會感謝任何幫助。就編程而言,我相對比較新,而對於Linux和Unix來說,就使用命令行而言,它是全新的。

非常感謝!

+0

如果所有文件都在同一個文件夾中,並且從該文件夾啓動GCC,則不存在nee d使用選項'-I'來查找'a1.h'和'a2.h'。 – alk

+0

GCC發佈什麼錯誤消息? – alk

+0

我一直得到相同的錯誤:沒有這樣的文件或目錄 – umayneverknow

回答

2
gcc -c 

告訴gcc將文件編譯爲對象(您在任何地方看到的.o文件)。稍後與一些其他.o文件鏈接到可執行文件。

所以你想要做的是要麼單獨編譯這兩個文件,以後再鏈接它們。喜歡這個。

gcc -I"/Home/Documents/ctests/" -c a1.c 
gcc -I"/Home/Documents/ctests/" -c a2.c 

gcc -o myprogram a1.o a2.o 

或者只是同時編譯和鏈接。

gcc -I"/Home/Documents/ctests/" a2.c a1.c -o myprogram 

,然後運行您的程序像

path_to/myprogram 
+0

難道你不是指'gcc a1.o a2.o -o myprogram'嗎? –

+0

'gcc -o a1.o a2.o myprogram'是一樣的。不是嗎? – 2013-04-01 14:11:21

+2

不,不是。它會嘗試編譯/鏈接'a2.o'和'myprogram'來創建一個可執行的'a1.o'。 (至少我的gcc 4.7.2呢) –

0

你的gcc命令應該是這樣的

gcc -I/Home/Documents/ctests/ -o a1.out a1.c 

,你必須包括這樣

a1.c a1.ha2.h頭文件
#include "a1.h" 
#include "a2.h" 

如果你在你的a1.c呼籲從a2.c一些功能,那麼你必須用這種方式

gcc -I/Home/Documents/ctests/ -o a1.out a2.c a1.c 
+0

文件包含這種方式,上面的海灣合作委員會代碼是寫作 gcc -I /家庭/文件/ ctests/a1.c -o a1.out 如果我沒有弄錯。而這似乎並沒有工作。 – umayneverknow

+0

@Ade是否在a1.c中使用了a2.c中的某個函數?如果是這種情況,我更新了我的答案 – MOHAMED

+0

是的,我做過。這就是問題所在。非常感謝! – umayneverknow

1

編譯一切都建立自己的程序,並鏈接在一起的。

如果所有文件都在一個目錄下,這應該工作:

gcc a1.c a2.c -o myapp 

當您要創建單獨的對象文件,這樣做:

gcc -c a1.c a2.c 

然後,你可以連接在一起以創建一個應用程序:

gcc a1.o a2.o -o myapp