.so 中未定义的符号

Undefined symbols in .so

提问人:OlegUP 提问时间:10/20/2022 最后编辑:OlegUP 更新时间:10/25/2022 访问量:441

问:

我开发库并尝试运行测试。 当我运行示例构建时,我收到了未定义的引用错误(在示例中,该错误之一):

/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_mapinline const.h.cc
  • 禁用优化-O0
  • 检查,很明显是必须的。$LIBRARY_PATH
  • 在两次构建期间查看命令行(),它是相同的。ldmake VERBOSE=1
C++ CMake 链接器错误 undefined-reference

评论

0赞 fabian 10/21/2022
投票是骗子,因为这似乎是你自己的库,所以这里是不正确的。静态数据成员的解决方案可能适用。什么是未定义的引用/未解析的外部符号错误,如何解决?
0赞 OlegUP 10/25/2022
这是一个发行版问题,在 docker 上它成功构建。可能,我的发行版上没有一个软件包是错误的。

答:

-1赞 OlegUP 10/25/2022 #1

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