C++ 编译报错 undefined reference to (找不到声明)快速排查

如题所述

可能原因:

Case 1: 链接时缺少定义了XXX的源文件、目标文件或库文件。

1.1 缺少源文件。

1.2 缺少目标文件。

1.3 缺少库文件。

Case 2: 链接顺序不对,多个库文件链接顺序问题或存在嵌套链接。

Case 3: 函数符号修饰不一致。

3.1 函数定义和声明不一致。

3.2 C和C++混合编程(在C++代码中链接C语言的库),解决方案是使用extern "C"处理为模块。

3.3 编译器版本或编译器选项不一致。

Case 4: 把模板函数写进了cpp文件中。

Case 5: API隐藏,常见于开源库不兼容的情况,库升级后API变为隐藏。

手动找到函数声明:

如何查看动态库文件提供了哪些函数符号?将bar.cpp文件编译成动态库bar.so文件,该文件提供了函数void bar(int)的实现。使用nm命令可以查看bar.so库中提供的函数符号。

nm -C可以查看函数名字修饰之前的名字。

如何推函数声明?已知函数修饰后的名字,可以使用c++filt命令反推函数源文件中的声明。

总结:

1. 检查编译器是否找不到定义了XXX的文件。

2. 检查由于函数修饰原因,定义了XXX的文件中是否缺少想要的XXX符号。

3. 找到想要的符号,但该符号是隐藏属性,不能链接使用。

若不确定库中是否有这个XXX符号,使用nm查找,使用c++filt从修饰后的符号找函数声明。
温馨提示:内容为网友见解,仅供参考
无其他回答

C++ 编译报错 undefined reference to (找不到声明)快速排查
1. 检查编译器是否找不到定义了XXX的文件。2. 检查由于函数修饰原因,定义了XXX的文件中是否缺少想要的XXX符号。3. 找到想要的符号,但该符号是隐藏属性,不能链接使用。若不确定库中是否有这个XXX符号,使用nm查找,使用c++filt从修饰后的符号找函数声明。

...编译C++多文件(包含模板类)|解决Undefined reference to报错...
在使用Visual Studio Code编译C++时,遇到了在多文件项目中(包含模板类)出现"undefined reference to"错误的问题。最初,我试图在头文件中定义模板类,以实现泛型编程,同时保持头文件(.h)与源文件(.cpp)分离,以便于复现“Algorithms, Part1”课程中的相关内容。问题在于,虽然在头文件中声明了类和模...

undefined reference to怎么解决的
main.o: In function `main': main.c:(.text+0x7): undefined reference to `test' collect2: ld returned 1 exit status 这就是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件,本例中test.o文件中包含了test()函数的实现,所以如果按下面这种方式链接就没事了。

"undefined reference to" 问题解决方法
首先,当链接时发现某个目标文件(.o)缺失时,就会出现 undefined reference 错误。比如,在测试代码中,编译后得到 main.o 和 test.o,但链接这两个 .o 文件生成可执行程序时,会报错。此时,需要确保 test.o 文件中 test() 函数的实现文件与 main.o 一同被编译,从而避免 undefined reference 错...

求助undefined reference to xxx'的问题
如果是采用 g++ -Lpath -lx 的方式进行编译,链接器会发现所需要的uldict的符号表找不到从而报错,但是如果是程序采用dlopen的方式载入,由于是运行期,这个程序在这个地方就直接运行报错了.另外还有一种情况就是一个对外的接口在动态库中已经声明定义了,但是忘记实现了,这个时候也会产生类似的错误....

undefined reference to异常怎么解决
这是个编程链接错误,意思是说在你的程序里引用了某个函数或变量, 但是链接器找不到该变量的定义.(1)如果报的符号是在某个第三方库里的, 比如uuid的什么什么函数, 则要检查你的libqte是不是编译得正确. 本来这些库应该正确链接到libqte.so上, 这样在qtopia链接的时候就不需要显式的加上这些库了...

c++编译时候出undefined reference to "ClassName::Function()"这种错...
一个错误是Set函数不能生命为const,因为你里边改变了成员变量的值 还有可能是工程没有关联好,重新建个工程

C++的“坑”之一:undefined reference
遇到"undefined reference"错误,如`undefined reference to google_breakpad::SetFirstChanceExceptionHandler(bool (*)(int, siginfo_t*, void*))'`,意味着链接阶段未能找到该函数。要解决,首先要检查编译命令是否包含了相应的源文件和库文件。例如,如果函数来自第三方库,确保在命令行中添加了正确的`...

c++ 编译时出现 undefined reference to “xxxx“ [Error] ld returned...
仅供参考:1、根据错误提示找不到winmain函数入口,看你的代码是main函数,那么你就需要把你工程属性-链接-系统改为控制台,而不是windows 2、推荐个学习交流群:872144107

C++中报错undefined reference to `WinMain'怎么解决?
你的编译类型不对,搞成windows程序了。不同编译工具设置不一样,你需要创建一个console类型的项目,不能直接打开个文件就写代码

相似回答
大家正在搜