【发布时间】:2012-03-19 22:28:20
【问题描述】:
如何将调试符号放入 ar 文件中
当我运行 gdb 然后键入 symbol-file somelib.a 时,它显示“somelib.a”:无法读取符号:文件格式无法识别。
它确实适用于组成 .a 文件的 .o 文件
我用 gcc -c -g somefile.c 编译
【问题讨论】:
如何将调试符号放入 ar 文件中
当我运行 gdb 然后键入 symbol-file somelib.a 时,它显示“somelib.a”:无法读取符号:文件格式无法识别。
它确实适用于组成 .a 文件的 .o 文件
我用 gcc -c -g somefile.c 编译
【问题讨论】:
静态库不是运行时文件,因此调试器不感兴趣。调试信息通常会在链接时从它们中提取出来并插入到最终的二进制文件中。
如果您考虑一下,从多个未链接的 .o 文件加载符号也是不可能的(或有意义的):它们都将具有相同的基地址(通常为零),这将无济于事。 .a 文件包含多个未链接的 .o 文件,并且会出现完全相同的问题。
如果您对二进制文件进行了条带化,则应该为此保留相应的调试文件(请参阅strip --only-keep-debug),而不是其中的库。只有可执行的二进制文件和共享库具有调试信息,其中包含有意义的地址。
【讨论】: