LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: echo

使用GCC编译时,能不能不让编译好的程序包含调试信息?

[复制链接]
发表于 2009-3-25 20:32:46 | 显示全部楼层
Post by newper;1965477
这说明diy-linux很大胆
http://www.diy-linux.org/referen ... ed.html#environment

人家可能编译库时有处理 LDFLAGS,您不妨看看是不是这样。
或者是 ld --help 谎报军情,有时间时验证一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-26 08:25:59 | 显示全部楼层
Post by 聚焦深空;1965455
楼上,ccache 应该是您需要的,如果您经常编译同一个软件包的话,包括升级,只有第一次编译时例外。

不生成调试信息,理论上是会快一些,人能不能感觉出来就两说了。
注意,这要去掉 CFLAGS CXXFLAGS 中的 "-g",包括 Makefile 中的 CFLAGS CXXFLAGS,才是不生成调试信息的正确做法。
上面改 LDFLAGS 的方法,相当于自动执行 strip,编译程序没问题,编译库时安全性有待检验。


使用这种方法编译lib库时会不会小一些?
回复 支持 反对

使用道具 举报

发表于 2009-3-26 08:56:18 | 显示全部楼层
去掉-g会小很多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-27 09:07:37 | 显示全部楼层
Post by slackcode;1965630
去掉-g会小很多


去掉-g参数编译的结果和做strip相比结果会是一样的吗?或是lib要小一些,可执行的程序都一样大小?
回复 支持 反对

使用道具 举报

发表于 2009-3-27 18:19:18 | 显示全部楼层
去掉-g 只是 不生成调试信息,和 strip 是两回事,您的标题可没说要 直接 strip。
回复 支持 反对

使用道具 举报

发表于 2009-3-28 00:40:37 | 显示全部楼层
Post by 聚焦深空;1966366
去掉-g 只是 不生成调试信息,和 strip 是两回事,您的标题可没说要 直接 strip。


我的理解是:
1、去掉-g,等于程序做了--strip-debug
2、strip程序,等于程序做了--strip-debug和--strip-symbol

所以strip后程序会更小点
但对于静态库.a之类的文件,只能用--strip-debug

一般程序编译时去掉-g就可以了
回复 支持 反对

使用道具 举报

发表于 2009-3-28 00:42:05 | 显示全部楼层
Post by echo;1966117
去掉-g参数编译的结果和做strip相比结果会是一样的吗?或是lib要小一些,可执行的程序都一样大小?


.so文件也可以strip的,按照经验是没有问题的
我平时strip用在.so和可执行程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-29 11:03:32 | 显示全部楼层
Post by slackcode;1966507
.so文件也可以strip的,按照经验是没有问题的
我平时strip用在.so和可执行程序


我总觉得给.so做strip不太安全,但是每次看到.so文件很大又不爽,所以想直接编译出不包含调试信息的.so文件。
回复 支持 反对

使用道具 举报

发表于 2009-3-29 22:37:36 | 显示全部楼层
so我都做strip,拿来跑商业产品的,经过考验
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-30 11:05:18 | 显示全部楼层
CLFS1.2快出来了,我到时候再试试看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表