我在工作中的 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 对象正在使用的类,我遇到了大量 undefined reference 错误。
解决方法是实际创建对象!所以如果我这样做:
#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;
}
一切正常,花花公子。
我怎样才能得到没有使用某些东西的链接器错误?我想听听以前是否有人遇到过类似的经历,以及他们是否找到了造成这种情况的原因。
对不起,我不能发布更多代码,因为它是公司属性(property)。 非常感谢!
最佳答案
链接器很复杂,这种行为并不罕见。这是一种可能的解释:
- 您正在链接静态库
libfoo.a
。 libfoo.a
包含foo.o
,后者包含SW_Agent_PP::SW_Agent_PP()
和许多其他函数。- 在链接行中
libfoo.a
之后列出的另一个库libbar.a
使用了libfoo.a
中的一堆其他函数.
链接器按顺序处理静态库,永远不会返回。因此,只有当 main()
从 libfoo.a
中提取相应的对象时,才能满足 libbar.a
中的引用。
解决方案是重新排序链接行中的库。
还有其他可能的解释。不看实际代码就很难说。
关于c++ - 奇怪的 'undefined reference' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162589/