【问题标题】:Undefined symbols in .so.so 中未定义的符号
【发布时间】:2022-10-25 20:34:33
【问题描述】:

我开发库并尝试运行测试。 当我运行示例构建时,我得到了未定义的参考错误(例如其中一个错误):

/opt/nt/lib/libntproto2db.so: undefined reference to ntproto::variant_t::TYPE::UINT8'

但是,如果我从存储库安装具有相同提交的相同版本,其中包含在其他机器上构建的包,我没有收到此错误。

nm 工具将符号识别为未定义,如果库构建在我的机器上:

$ nm -C -u /opt/nt/lib/libntproto2db.so | grep UINT8
                 U ntproto::variant_t::TYPE::UINT8

也就是说,如果我在另一台机器上构建这个库,那么这些符号不会变得未定义。为什么?

我试过了:

  • 移动 std::unordered_map 全局 inline const 变量,该变量包含从 .h.cc 文件的这种类型的值,这有帮助,但这是一个糟糕的解决方案。
  • 禁用优化-O0
  • 检查$LIBRARY_PATH,必须清楚。
  • 在两个构建期间查看ld 命令行 (make VERBOSE=1),它是相同的。

【问题讨论】:

标签: c++ cmake linker-errors undefined-reference


【解决方案1】:

这是一个发行版问题,在 docker 上它成功构建。可能,我的发行版中的一个包有错误的版本。

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多