如何调试丢失的符号 - 从哪里需要?
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
这让我能够追踪编译单元,进而让我能够(手动)找到有问题的代码。
【讨论】:
以上是关于如何调试丢失的符号 - 从哪里需要?的主要内容,如果未能解决你的问题,请参考以下文章
如何删除诸如“等待调试器连接...调试器已连接调试器连接丢失”之类的错误。关机……”