如何在生成共享库时保留调试符号

时间:2013-12-17 09:21:58

标签: linux makefile rpm cc ppp

从目标文件生成共享对象时是否可以保留调试符号?

例如,我使用隐式目标使用cc生成带有调试符号的目标文件,并且仅将-g添加到CFLAGS。然后,我通过定义一个自定义目标来生成共享对象(.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选项。

谢谢!

1 个答案:

答案 0 :(得分:2)

快速而肮脏的答案是添加     退出0 在%安装脚本的末尾禁用 附加到末尾的各种助手 运行时%install build scriptlet。

更具体的答案是检查帮助程序scriptlet (使用分离调试符号的共享库)     rpm --showrc 在您的系统上并修改正在运行的帮助程序。

需要配置的两个最重要的宏 diable debug符号剥离是:

# 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软件包中重新定义。