c++ - 奇怪的 'undefined reference' 错误

标签 c++

我在工作中的 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)。 非常感谢!

最佳答案

链接器很复杂,这种行为并不罕见。这是一种可能的解释:

  1. 您正在链接静态库 libfoo.a
  2. libfoo.a 包含 foo.o,后者包含 SW_Agent_PP::SW_Agent_PP() 和许多其他函数。
  3. 在链接行中 libfoo.a 之后列出的另一个库 libbar.a 使用了 libfoo.a 中的一堆其他函数.

链接器按顺序处理静态库,永远不会返回。因此,只有当 main()libfoo.a 中提取相应的对象时,才能满足 libbar.a 中的引用。

解决方案是重新排序链接行中的库。

还有其他可能的解释。不看实际代码就很难说。

关于c++ - 奇怪的 'undefined reference' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162589/

相关文章:

C++ : Is it bad practice to use a static container in a class to contain pointers to all its objects for ease of access?

c++ - 在动态内存分配后将整数传递给构造函数

c++ - 全局对象和创建顺序

c++ - 如何在同一个程序/函数中每次生成不同的随机数集?

c++ - 在 CUDA 上乘以两个 float 变量

用于转发协变返回的 C++ 抽象基础模板

c++ - 为什么其他函数输出错误的值?

c++ - 是否可以将所有权从 void* 转移到 unique_ptr?

c++ - 如何比较 C 或 C++ 中的日/月/年?

c++ - 从基类的 vector 访问继承的类方法