我正在开发一个相当大的项目,它有很多外部依赖项。我在开发过程中一直致力于调试构建。现在,当我尝试构建版本(经过很长时间)后,我收到一条错误消息,指出找不到特定的符号。在我的具体情况下,链接器给出了一个错误,指出找不到start_thread_noexcept
符号。这个符号应该在boost-thread中找到但是当我检查我使用nm -G -D --demangle
的boost-thread的版本时,我发现确实找不到这个符号(我找到一个名为{{1}的符号虽然)。显然,noexcept符号可以在更新版本的库中找到。
然而,我的问题更为通用。我现在想做的是找到这个符号要求的起源。我猜我必须有一些新的函数调用,它反过来调用start_thread
函数。显然,编译我的代码时必须生成一个start_thread_noexcept
文件,我可以追溯到这个要求。要不然,或者我添加了一些新的第三方依赖项,而这又需要新版本的boost-thread库。如何找到需要此未定义符号的代码/库?
答案 0 :(得分:1)
我去了中间目录并做了
for x in *.o; do echo $x; nm $x | grep "_ZN5boostlsIcSt11"; done
这使我能够追踪编译单元,这反过来又让我找到(手动)有问题的代码。