c - 使用头文件时出现 undefined symbol 错误

标签 c linker-errors undefined-reference undefined-symbol

我遇到了以下错误,并且终生无法弄清楚我做错了什么。

$ 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

ma​​in.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/

相关文章:

c++ - OpenGL 未解析的外部符号 VS 2013

C++ 模板类静态常量变量成员作为映射键给出 undefined reference

gcc - libpthread.so.0 : error adding symbols: DSO missing from command line

c - 如何删除具有特定值的节点?

java - 使用 long 将指针从 JNI 传递到 Java

c - 我不断收到错误消息的此 c 代码中有什么错误?

php - http/javascript/php 在 C 中执行后

c++ - 错误 LNK2001 : unresolved external symbol public: static class

C++:单例类设计(错误:未解析的外部符号)

c - 对我自己的库的 undefined reference