我犯了下面的错误,一辈子都搞不清我做错了什么。
$ 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
主要c:
#include <stdio.h>
#include "wtf.h"
main(){
wtf();
}
水处理厂:
void wtf();
世贸中心:
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
您可以直接运行具有相同效果的
gcc
,而不是最后的ld
调用。关于c - 使用头文件时出现 undefined symbol 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50300247/