如何调试丢失的符号 - 从哪里需要?

Posted

技术标签:

【中文标题】如何调试丢失的符号 - 从哪里需要?【英文标题】:How to debug missing symbol - required from where? 【发布时间】:2015-03-18 17:13:33 【问题描述】:

R 中加载.so 文件时,我得到了

undefined symbol: _ZN5boostlsIcSt11char_traitsIcEdEERSt13basic_ostreamIT_T0_ES7_RKNS_8optionalIT1_EE

拆解这个产生

std::basic_ostream<char, std::char_traits<char> >& boost::operator<< <char, std::char_traits<char>, double>(std::basic_ostream<char, std::char_traits<char> >&, boost::optional<double> const&) 

我不知道符号要求是从哪里来的。 /boost/optional/optional_io.hpp 定义了这样一个运算符,但它是一个内联定义。

从这里去哪里?我可以找出哪些代码需要这个符号吗?

【问题讨论】:

您使用的是什么 IDE?哪个平台?一些 IDE 具有查找符号的能力。 CodeLite on Ubuntu 【参考方案1】:

我去了中间目录,做了

for x in *.o; do echo $x; nm $x | grep "_ZN5boostlsIcSt11"; done

这让我能够追踪编译单元,进而让我能够(手动)找到有问题的代码。

【讨论】:

以上是关于如何调试丢失的符号 - 从哪里需要?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除诸如“等待调试器连接...调试器已连接调试器连接丢失”之类的错误。关机……”

在汇编ARMv8中符号扩展后逻辑左移丢失位

Visual Studio 远程调试 - MSVCP140.dll 丢失

应用程序重新启动时照片丢失并取消固定

mac如何还原垃圾桶删掉的

如果存储桶路径的第一个反斜杠丢失,gsutil 会将我的文件复制到哪里?