制作debug的rpm的一些问题

简介

  • gcc -g 会创建符号表,符号表包含了程序中使用的变量名称的列表,关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行
  • 在编写spec的时,如果不希望生成debug包,则可以加 %define debug_package %{nil} 屏蔽掉在rpmbuild过程中的校验。

场景1:

  • spec文件中加%define debug_package %{nil}
  • spec文件加了 cmake .. -DCMAKE_BUILD_TYPE=Debug 或者 cmakelist中加 -g
    那么在执行 rpmbuild -ba xxx.spec 时,/root/rpmbuild/BUILD/hello-1.0/build路径下会生成带debug信息的二进制
Type "apropos word" to search for commands related to "word"...
Reading symbols from hello...
(gdb)

然后构建出来的rpm安装后,是不带符号信息的

[root@localhost x86_64]# gdb /usr/bin/hello
...
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/hello...
(No debugging symbols found in /usr/bin/hello)

这是因为在构建过程中,调用了/usr/bin/strip,

+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1 1
+ /usr/lib/rpm/brp-python-hardlink
# GPT
`/usr/bin/strip` 是一个二进制程序,它属于 GNU Binutils 工具集的一部分,主要用于处理二进制文件(如可执行文件、动态链接库等),执行以下操作以优化或缩小文件大小:

**去除符号表**(Symbol Table):
   `strip` 命令可以移除二进制文件中的符号表信息。符号表包含了函数名、变量名、全局常量名等符号及其在内存中的地址映射,对于程序调试非常有用。但在发布或部署阶段,这些信息对于最终用户并不必要,移除它们可以显著减小二进制文件的大小。

**剥离调试信息**:
   除了符号表,`strip` 还能去除编译时加入的调试信息(如 DWARF 调试信息),这些信息对于调试器(如 `gdb`)定位源代码、查看变量值等非常关键,但同样增加了二进制文件的大小。在发布版本中移除这些调试信息可以进一步压缩文件。

**优化**:
   除了纯粹的尺寸缩减,`strip` 还可能进行一些优化,如合并重复的字符串、消除未引用的符号等,进一步提高二进制文件的性能或减少其占用空间。

可以做个测试,对一个带调试信息的二进制

[root@localhost build]# /usr/bin/strip hello
[root@localhost build]# gdb hello
Reading symbols from hello...
(No debugging symbols found in hello)

场景2

  • spec文件中不加%define debug_package %{nil}
  • spec文件加 cmake .. -DCMAKE_BUILD_TYPE=Debug<
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值