什么是未定义的参考/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?
随意编辑/添加您自己的.
c++ c++-faq linker-errors unresolved-external undefined-reference
在什么情况下,GCC 在尝试调用伪造函数时不会抛出"未定义的引用"链接错误消息?
例如,GCC编译和链接此C代码的情况:
void function()
{
made_up_function_name();
return;
}
Run Code Online (Sandbox Code Playgroud)
...即使代码中made_up_function_name没有任何地方(不是标题,源文件,声明或任何第三方库).
GCC是否可以在某些条件下接受和编译这种代码,而无需触及实际代码?如果是这样,哪个?
谢谢.
编辑:之前没有任何声明或提及made_up_function_name.这意味着grep -R整个文件系统中的一个只显示完整的单行代码.
假设我有两个源文件--UndefErr.cpp:
#include <cstdio>
void UndefFunc();
void Func2(){UndefFunc();}
void Func1(){printf("Hi\n");}
Run Code Online (Sandbox Code Playgroud)
而main.cpp:
void Func1();
int main(){
Func1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如您在UndefErr.cpp中看到的那样,Func2()将使用undefined来触发错误UndefFunc().不过主要功能并不关心Func2()!根据一个相关的问题,我可以将一个选项--unresolved-symbols = ignore-in-object-files传递给链接器,但我想要一个不同的东西.我需要一个链接器来知道未定义的函数是否在某处使用,然后才会失败.
提出这样一个奇怪问题的原因是我正在尝试使用lwIP,并且很难理解它的所有依赖关系(我只需要TCP/IP),而且我无法在互联网上找到教程.所以我认为我可以单独编译大多数(或所有) .c文件,并编写一些简单的测试来查看它的作用.但是这种方法偶然发现了"未定义的引用",其中大多数可能与用例无关.