2013-04-01 122 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