奇怪的'undefined reference'错误
Weird 'undefined reference' error
我在工作中遇到了一个特殊的错误C++。
我已经找到了一个修复程序,但现在我真的很满意,因为我想了解实际导致错误的原因。
构建此代码片段时:
#include <iostream>
#include "snmp/snmp/SW_SNMP_Values.hpp"
#include "snmp/agent/SW_Agent.hpp"
#include "snmp/agent/SW_Agent_PP.hpp"
int main()
{
//SW_Agent_PP agent;
return 0;
}
请注意,SW_Agent_PP被注释掉了!!在构建它时,对于SW_Agent_PP对象正在使用的类,我得到了大量未定义的引用错误。
解决方法是实际创建对象! 所以如果我这样做:
#include <iostream>
#include "snmp/snmp/SW_SNMP_Values.hpp"
#include "snmp/agent/SW_Agent.hpp"
#include "snmp/agent/SW_Agent_PP.hpp"
int main()
{
SW_Agent_PP agent;
return 0;
}
一切都很好,花花公子。
如何因不使用某些内容而获得链接器错误?我想听听是否有人以前遇到过类似的经历,以及他们是否找到了导致它的原因。
很抱歉,我无法发布更多代码,因为它是公司财产。提前非常感谢!
链接
器很复杂,这种行为并不罕见。这里有一个可能的解释:
- 您正在链接到静态库
libfoo.a
。 -
libfoo.a
包含包含SW_Agent_PP::SW_Agent_PP()
和一堆其他函数的foo.o
。 - 另一个库
libbar.a
,列在链接行中libfoo.a
之后,使用了libfoo.a
中的一堆其他函数。
链接器按顺序处理静态库,永远不会返回。因此,只有当相应的对象被main()
从libfoo.a
拉出时,才能满足libbar.a
中的引用。
解决方案是重新排序链接行中的库。
还有其他可能的解释。如果不看到实际代码,很难分辨。
相关文章:
- 包含<iostream>时"Undefined reference"错误
- 使用程序集嵌入数据时"Undefined reference"错误,使用适用于窗口的 mingw-w64 编译(COFF 而不是 ELF)
- 带有 mingw-w64 的 SDL2 - 链接器找到 libSDL2.a,但抛出"undefined reference"错误
- 我收到"undefined reference"错误,我不明白为什么(C++ OO)
- 如何修复代码中的"Invalid memory reference"错误?
- 在折叠表达式中使用 lambda 时"Uninitialized captured reference"错误 - clang vs gcc
- Qt5 - 尝试创建登录页面时"undefined reference"错误
- 我的一堆函数出现"undefined reference"错误,我不知道为什么
- 链接升压库时出现的另一个"undefined reference"错误
- 提升/ASIO/SSL 抛出"undefined reference"错误
- 在 Eclipse ADT 中,我创建了一个新的 cpp 文件并收到"undefined reference"错误
- 使用自定义析构函数时出现"Undefined reference"错误
- 链接Qt应用程序时出现数百个"undefined reference"错误
- 为什么NDK在Build上抛出Undefined Reference错误
- C++ "invalid initialization of non-const reference"错误
- 跨多个文件的命名空间"undefined reference"错误
- GCC 为依赖于默认构造函数的模板化类中的静态数据成员提供"undefined reference"错误
- 使用指针数组时出现"Undefined reference"错误
- 通过引用传递变量时出现"Undefined reference"错误
- Cassandra c++ 驱动程序"undefined reference"错误