如何在这个小程序中包含foo.c的foo()函数(对不起我的noob问题):
在我的foo.h文件中:
/* foo.h */ #include#include int foo(double largeur);
在foo.c中:
/* foo.c */ #include#include #include "foo.h" int foo(double largeur) { printf("foo"); return 0; }
在main.c:
/* main.c */ #include#include #include "foo.h" int main(int argc, char *argv[]) { printf("Avant..."); foo(2); printf("Apres..."); return 0; }
编译后:
$ gcc -Wall -o main main.c
我收到此错误:
未定义的符号:"_ foo",引用自:ccerSyBF中的_main.l ld:未找到符号collect2:ld返回1退出状态
谢谢你的帮助.
$ gcc -Wall -o main main.c foo.c
foo.c
如果你不告诉它,GCC不知道要找:)
在C中创建程序需要两个步骤,编译和链接.要运行编译部分,请使用以下-c
选项gcc
:
gcc -c main.c
这将创建一个目标文件main.o
(或main.obj
在Windows上).同样的gcc -c foo.c
.在此阶段您不会收到上面的错误消息.然后将这两个目标文件链接在一起.在此阶段,符号foo
得到解决.您收到错误消息的原因是因为链接器找不到符号,因为它只是查看main.o
而不是foo.o
.链接器通常从中运行gcc
,因此要链接目标文件并创建最终的可执行文件main
,请使用
gcc -o main main.o foo.o
你还必须编译,foo.c
因为它是另一个模块.让我看看他们是如何做到的gcc
:
$ gcc -Wall main.c foo.c -o main