繁体   English   中英

推荐的GCC发行版本标记

[英]Recommended GCC release build flags

我为C ++项目使用了自定义的生成文件。 我正在寻找发布版本的最推荐的编译标志。 我目前正在使用以下内容:

CXXFLAGS + = -O3 -Wall -DNDEBUG

我以为上面的内容就足够了,但是后来我尝试在二进制文件上运行“ strip”工具,它使大小缩小了很多。 看起来二进制文件中仍然有一些非必需的东西。

我知道这是一个广泛的话题,但是我正在寻找优化(速度和大小)版本的通用设置。 我知道默认情况下,gcc甚至不会丢弃死代码-我想弄清楚怎么做。

供参考,我的制作设置为https://github.com/YasserAsmi/buildmk

是的,例如,链接后剥离将删除C ++库中包含的全局符号。 您可以使用-s选项使g++做到这一点。 它确实使在客户站点上调试应用程序成为可能(例如,告诉客户运行gdb myprog并在崩溃时执行bt不会给您任何符号->很难找到代码的位置,除非您使用相同的二进制文件符号[或可以重现一个符号],然后您可以在其中找到符号[或可以重现问题,但是很多时候希望如此]。

如果您需要较小的代码,则还可以使用-O而不是-O3-这将使编译器生成优化的代码,但不进行使代码更大的优化(因此仅内联微小函数,而不是展开循环等)。 在某些情况下,小代码实际上比“更高的优化”级别运行速度要快,但大代码则要运行,因为在许多地方调用的中型函数是作为单个函数保留在缓存中的,而不是内联和膨胀应用。

不幸的是,通常很难确定任何特定选项对可执行文件的大小有什么影响-在某些情况下,内联会使代码更小,而在其他情况下,内联会使代码更长。 与循环中执行相同操作等相比,展开计数为2的循环会使代码更短。如果您想要快速而又小的代码,则将不得不摆弄setitng,看看哪些对您有什么影响码。 确保跟踪每个选项的效果。 有相当多的不同的优化选项,上市这里 (这是为4.9.1,你可以找到过在GCC网站年长手册的在线版本)。

CXXFLAGS += -O3 -Wall -DNDEBUG

很好 假设使用NDEBUG,我绝不会亲自使用。 如果需要较小的二进制文件,请使用“ -s”带状符号表,该表类似于带状结构。 通常,我不会打扰并将符号表留在那里,因为它仍然有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM