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



我正在处理一个实现一些通用容器的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系统上编译,但也尝试过在红帽子机器上编译,效果也一样。

解决方案可能是显而易见的,但我有很多朋友在研究这个问题,他们看不出问题所在。我在谷歌上搜索了很多,但大多数符号错误问题通常与目标C有关。

您需要将它们一起编译:

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

您还必须将foo.c编译到一个对象文件中,并将所有这些文件链接在一起:

gcc -o foo.o foo.c
gcc -o main.o main.c
gcc -o main main.o foo.o

是的,这很简单,所以我建议你读一本好的C书,并迈出这些简单的步骤。

最新更新