从对象文件生成共享对象时,是否有可能保留调试符号?
例如,我使用隐式目标使用cc生成带有调试符号的对象文件,并且只将-g添加到CFLAGS中。然后,我通过定义一个自定义目标来生成共享对象(.so)文件,在该目标中我使用了cc.的-shared选项
到目前为止,我的观察结果是:
- 当直接从源代码文件生成共享对象时,我确实得到了调试符号
- 从包含调试符号的对象文件生成共享对象时使用-g选项没有帮助
我的假设是:
- 调试符号实际上并不包括在内,因为在创建rpm时,/usr/lib/rmp/find-debuginfo.sh会自动运行,并且我收到一些警告,说我的文件已经被剥离
如果需要确切的文件进行检查,请以radius.so的生成方式为例:http://git.ozlabs.org/?p=ppp.git;a=斑点;f=pppd/plugins/radius/Makefile.linux;h=24de3e580c4db6eca129dd22dbe5f2d1ff5f;hb=头
我需要再次提到,我已经向CFLAGS添加了-g选项。
谢谢!
快速而肮脏的答案是添加退出0在%install脚本的末尾附加到的末尾的各种帮助程序运行时的%install内部版本scriptlet。
更具体的答案是检查辅助脚本(剥离调试符号的共享库)使用rpm—showrc并修改正在运行的帮助程序。
需要配置为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配置包中重新定义。