C.基本头文件设置中缺少符号编译错误

时间:2012-01-14 18:58:29

标签: c compiler-construction header symbols

我正在开发一个实现一些通用容器的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有关。

2 个答案:

答案 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书,然后按照这些简单的步骤进行操作。