【发布时间】: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),它是相同的。
【问题讨论】:
-
投票为骗子,因为这似乎是您自己的库,在这里不正确。可能适用于静态数据成员的解决方案。 What is an undefined reference/unresolved external symbol error and how do I fix it?
-
这是一个发行版问题,在 docker 上它成功构建。可能,我的发行版中没有一个软件包是错误的。
标签: c++ cmake linker-errors undefined-reference