【发布时间】:2014-04-22 05:13:28
【问题描述】:
我正在从事一个相当大的项目,该项目具有大量外部依赖项。我在开发期间一直致力于调试构建。现在,当我尝试构建版本时(经过很长时间),我收到一条错误消息,指出未找到特定符号。特别是在我的情况下,链接器给我一个错误,说找不到start_thread_noexcept 符号。这个符号预计会在 boost-thread 中找到,但是当我检查我使用 nm -G -D --demangle 的 boost-thread 版本时,我发现确实找不到这个符号(我确实找到了一个名为 start_thread 的符号)。显然,noexcept 符号可以在该库的更新版本中找到。
然而,我的问题更为笼统。我现在要做的是找到这个符号要求的起源。我猜我一定有一些新的函数调用,它反过来又调用了start_thread_noexcept 函数。显然,在编译我的代码时必须生成一个.o 文件,我可以将此要求追溯到。要么,要么我添加了一些新的第三方依赖项,而这又需要新版本的 boost-thread 库。如何找到需要这个未定义符号的代码/库?
【问题讨论】:
-
您可以从枚举您的对象和外部依赖项开始,然后依次在每个对象上运行
nm --demangle | grep mysterysymbol。 -
链接器还应该打印请求未解析符号的目标文件(参见例如this nifty example)。什么是链接器错误信息?