奇怪的'undefined reference'错误

Weird 'undefined reference' error

本文关键字:reference 错误 undefined      更新时间:2023-10-16

我在工作中遇到了一个特殊的错误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;
}

一切都很好,花花公子。

如何因不使用某些内容而获得链接器错误?我想听听是否有人以前遇到过类似的经历,以及他们是否找到了导致它的原因。

很抱歉,我无法发布更多代码,因为它是公司财产。提前非常感谢!

链接

器很复杂,这种行为并不罕见。这里有一个可能的解释:

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

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

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

还有其他可能的解释。如果不看到实际代码,很难分辨。