我正在做一个相当大的项目,它有大量的外部依赖。我在开发期间从事调试构建工作已经有一段时间了。现在,当我尝试构建发行版(在很长一段时间之后)时,我得到一个错误,说找不到特定的符号。在我的例子中,链接器给我一个错误,告诉我找不到start_thread_noexcept符号。这个符号预计会在boost-thread中找到,但当我使用nm -G -D --demangle检查boost-thread的版本时,我发现确实没有找到这个符号(我确实找到了一个名为start_thread的符号)。显然,可以在较新版本的库中找到noexcept符号。
然而,我的问题更一般。我现在要做的,是找到这个符号要求的起源。我猜一定有一些新的函数调用,这反过来又调用了start_thread_noexcept函数。显然,在编译我的代码时必须生成一个.o文件,我可以将此需求追溯到该文件。或者,我已经添加了一些新的第三方依赖项,这反过来需要新版本的boost-thread库。我怎样才能找到需要这个未定义符号的代码/库?
发布于 2015-03-19 16:42:17
我去中间目录做了
for x in *.o; do echo $x; nm $x | grep "_ZN5boostlsIcSt11"; done这使我能够跟踪编译单元,这反过来又允许我(手动)找到有问题的代码段。
https://stackoverflow.com/questions/23210898
复制相似问题