【发布时间】:2012-01-09 17:58:43
【问题描述】:
对于我正在开发的一个小项目,我一直在通过命令行使用简单的编译。但是,随着它变大,我决定学习并使用 autoconf 和 automake 来编译它。
经过一些配置,我使用automake成功构建。但是我注意到输出二进制文件的大小比通过命令行使用 g++ 大。我尝试使用静态和动态库,结果是一样的。
我还尝试了一个简单的 hello world,它使用 automake 也比使用命令行编译更大。
所以,我尝试运行objdump -h:编译后的命令行返回了 27 个部分,另一方面,编译后的 automake 返回了相同的 27 个部分加上 7 个名为 debug_aranges 、debug_info 、debug_abbrev、debug_line、debug_loc、debug_ranges 的部分.所以我显然倾向于认为这与调试有关。
所以,任何人都知道这些部分的用途,如果它们是必要的,以及如何摆脱它们,那么可执行文件就更小了,便于分发。
【问题讨论】:
-
我不太了解 automake,但似乎您正在通过 automake 脚本包含调试符号。尝试找到禁用它的 automake 选项。
-
据此 - 尝试
stripping 二进制文件;之后还大吗? -
是的!在两者上使用条带后,它们的尺寸相同。对不起,我不知道这个命令。我还意识到“问题”是 automake 在编译期间自动将 -g 参数放入 g++ 中,这实际上是 dtech 所说的调试符号。感谢您的帮助。
-
automake 编译时使用用户定义的 CFLAGS 配置时间,默认 CFLAGS 设置为“-g -O2”。你不应该改变你的 Makefile.am 来改变它,而是在你运行 configure 时分配 CFLAGS。