LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1814|回复: 23

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

[复制链接]
发表于 2009-3-25 08:05:26 | 显示全部楼层 |阅读模式
使用GCC编译时,能不能不让编译好的程序包含调试信息?GCC有没有参数可以做到这一点?

这样在编译完后可以不用清除程序中的调试信息。
发表于 2009-3-25 11:21:03 | 显示全部楼层
export CFLAGS="-O2"
回复 支持 反对

使用道具 举报

发表于 2009-3-25 11:48:59 | 显示全部楼层
export LDFLAGS="-s"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 16:03:06 | 显示全部楼层
Post by trublemaker;1965242
export CFLAGS="-O2"



O2参数能不生成调试信息?不太可能吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 16:21:22 | 显示全部楼层
Post by newper;1965250
export LDFLAGS="-s"


谢谢:yun::yun:
回复 支持 反对

使用道具 举报

发表于 2009-3-25 19:03:56 | 显示全部楼层
不生成调试信息会不会快一些?
怎么有效加快编译速度?在同等硬件的情况下
回复 支持 反对

使用道具 举报

发表于 2009-3-25 19:34:17 | 显示全部楼层
楼上,ccache 应该是您需要的,如果您经常编译同一个软件包的话,包括升级,只有第一次编译时例外。

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

使用道具 举报

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

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


嗯,用gentoo时,我都会装ccache的
编译静态库时不能使用strip,只能strip --strip-debug,不然会把符号信息弄丢的,我记录lfs安装文档是这么的说
回复 支持 反对

使用道具 举报

发表于 2009-3-25 20:08:46 | 显示全部楼层
刚刚查了一下 ld --help
  -s, --strip-all             Strip all symbols
  -S, --strip-debug           Strip debugging symbols
  --strip-discarded           Strip symbols in discarded sections
  --no-strip-discarded        Do not strip symbols in discarded sections

LDFLAGS 中加 "-s" ,不注意的话会死人的。
回复 支持 反对

使用道具 举报

发表于 2009-3-25 20:26:23 | 显示全部楼层
Post by 聚焦深空;1965469
刚刚查了一下 ld --help


LDFLAGS 中加 "-s" ,不注意的话会死人的。

这说明diy-linux很大胆
http://www.diy-linux.org/referen ... ed.html#environment
回复 支持 反对

使用道具 举报

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

本版积分规则

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