提问人:OlegUP 提问时间:10/20/2022 最后编辑:OlegUP 更新时间:10/25/2022 访问量:441
.so 中未定义的符号
Undefined symbols in .so
问:
我开发库并尝试运行测试。 当我运行示例构建时,我收到了未定义的引用错误(在示例中,该错误之一):
/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
答:
-1赞
OlegUP
10/25/2022
#1
这是一个发行版问题,在 docker 上它成功构建。可能,我的发行版上的一个软件包版本错误。
评论