我遇到了以下错误,并且终生无法弄清楚我做错了什么。
$ gcc main.c -o main
Undefined symbols:
"_wtf", referenced from:
_main in ccu2Qr2V.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
main.c:
#include <stdio.h>
#include "wtf.h"
main(){
wtf();
}
wtf.h:
void wtf();
wtf.c:
void wtf(){
printf("I never see the light of day.");
}
现在,如果我在头文件中包含整个函数而不仅仅是签名,它符合要求,所以我知道包含了 wtf.h。为什么编译器看不到 wtf.c?还是我遗漏了什么?
问候。
最佳答案
您需要将 wtf
与您的 main
链接起来。将它们编译在一起的最简单方法 - gcc
将为您链接它们,如下所示:
gcc main.c wtf.c -o main
更长的方式(wtf
的单独编译):
gcc -c wtf.c
gcc main.c wtf.o -o main
甚至更长(单独编译和链接)
gcc -c wtf.c
gcc -c main.c
gcc main.o wtf.o -o main
您可以直接运行 ld
而不是最后一次 gcc
调用,效果相同。
关于c - 使用头文件时出现 undefined symbol 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2972096/