我正在开发一个实现一些通用容器的C项目,并且在编译时遇到了这个奇怪的问题。以下是一些示例代码,它们也会复制错误。
foo.h中
void fooprint(void);
foo.c的
#include "foo.h"
#include <stdio>
void fooprint(void){
printf("bar");
return;
}
的main.c
#include "foo.h"
int main(void){
fooprint();
return 0;
}
我通过输入
进行编译gcc main.c -o main
这就是终端输出
Undefined symbols:
"_fooprint", referenced from:
_main in ccfMXGzj.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
我正在OSX系统上编译它,但也尝试在具有相同效果的红帽机器上进行编译。
解决方案可能非常明显,但是我有多个朋友,我正在研究这个,他们无法看到问题。我已经google了很多,但大多数符号错误问题通常与客观C有关。
答案 0 :(得分:1)
你需要一起编译它们:
gcc -Wall -Wextra -o main main.c foo.c
或者也许制作一个Makefile?
all: main
main: main.o foo.o
main.o: main.c
foo.o: foo.c
答案 1 :(得分:1)
您还必须将foo.c
编译到目标文件中并将所有这些文件链接在一起:
gcc -o foo.o foo.c
gcc -o main.o main.c
gcc -o main main.o foo.o
是的,这很简单,所以我建议你阅读一本好的C书,然后按照这些简单的步骤进行操作。