这个警告意味着什么?

341*_*008 11 linux warnings gdb dynamic

我经常从gdb遇到以下警告:

warning: .dynamic section for XXX is not at the expected address

其中XXX是某个库的名称.最近我得到了libgobject-2.0.so.我的应用程序使用GTK.直到昨天我从存储库中同步了最新的代码并重新构建它之前,gdb一直没有问题地启动它.从那以后,它一直在抱怨.dynamic部分.有什么可能的原因呢?我该如何解决它们?

thk*_*ala 7

一些gdb版本实际上对该警告更有帮助.他们输出如下内容:

警告:.dynamic节为"libhello.so"是不是预期的地址(错误库或版本不匹配?)

确保GDB就会发现你的程序实际上,任何调试符号编译,如果在不同的文件,为应用程序和库是最新的,一致的与您正在使用生成库.

升级听起来像是一个原因的好嫌疑人.预链接库也可能导致出现此警告,但我认为gdb可以处理这种情况.

  • 一个典型的例子:T1)应用程序启动并继续使用旧的二进制文件运行,T2)然后二进制文件/符号在磁盘上“升级”(但应用程序没有重新启动),T3)然后应用程序崩溃(或gcore生成)。通过查看升级时间戳 (T2) 和核心转储时间戳 (T3) - 人们会假设使用了正确的(升级的)lib。错误的假设!提前知道这一点会拯救我的一天......我们的应用程序使用自定义 LD_LIBRARY/etc 启动环境,所以我们不得不在面对明显的之前用尽所有其他选项(IT 人员只是忘记在升级后重新启动应用程序) (2认同)