从对象文件生成共享对象时是否可以保留调试符号?
例如,我使用cc使用隐式目标生成带有调试符号的对象文件,并且只向cflags添加-g。然后,我通过定义一个自定义目标来生成共享对象(.so)文件,我在其中使用了cc的-shared选项。
到目前为止,我的观察结果是:
当直接从源代码文件生成共享对象时,我得到了调试符号
从包含调试符号的对象文件生成共享对象时使用-g选项没有帮助
我的假设是:
实际上不包括调试符号,因为在创建RPM时,/usr/lib/rpm/find-debuginfo.sh会自动运行,并且我收到一些警告,说我的文件已经被剥离了
如果需要检查确切的文件,例如radius.so是如何生成的:
http://git.ozlabs.org/?p=ppp.git;a=blob;f=pppd/plugins/radius/Makefile.linux;h=24ed3e580c4db6aeca129dd22dbe6de5f2d1ff5f;hb=HEAD
我需要再次提到,我在cflags中添加了-g选项。
谢谢您!
最佳答案
快速而肮脏的答案是
退出0
在%install脚本的末尾禁用
附加到结尾的各种帮助程序
运行时,%安装生成脚本。
更具体的答案是检查helper脚本
(去掉调试符号的共享库)使用
RPM—显示
并修改正在运行的帮助程序。
两个最重要的宏需要配置为
Diable调试符号剥离是:
# Define per-arch and per-os defaults. Normally overridden by per-target macros.
%__arch_install_post %{nil}
%__os_install_post %{___build_post}
通常在redhat rpm config包中重新定义。
关于linux - 生成共享库时如何保留调试符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20630261/