寻找符号依赖的起源

时间:2014-04-22 05:13:29

标签: c++ linker

我正在开发一个相当大的项目,它有很多外部依赖项。我在开发过程中一直致力于调试构建。现在,当我尝试构建版本(经过很长时间)后,我收到一条错误消息,指出找不到特定的符号。在我的具体情况下,链接器给出了一个错误,指出找不到start_thread_noexcept符号。这个符号应该在boost-thread中找到但是当我检查我使用nm -G -D --demangle的boost-thread的版本时,我发现确实找不到这个符号(我找到一个名为{{1}的符号虽然)。显然,noexcept符号可以在更新版本的库中找到。

然而,我的问题更为通用。我现在想做的是找到这个符号要求的起源。我猜我必须有一些新的函数调用,它反过来调用start_thread函数。显然,编译我的代码时必须生成一个start_thread_noexcept文件,我可以追溯到这个要求。要不然,或者我添加了一些新的第三方依赖项,而这又需要新版本的boost-thread库。如何找到需要此未定义符号的代码/库?

1 个答案:

答案 0 :(得分:1)

我去了中间目录并做了

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

这使我能够追踪编译单元,这反过来又让我找到(手动)有问题的代码。