我想通过构建最新的GCC 6.3.0。
https://gcc.gnu.org/install/configure.html和https://gcc.gnu.org/onlinedocs/libstdc configure.html但不明白它们的含义。
特别是,这些是我想尝试的标志:
-
--disable-libstdcxx-verbose
:我很少使用异常,所以我对它的工作方式并不熟悉。我从未见过它之前提到的"冗长消息"。 -
--enable-linker-build-id
和--enable-gnu-unique-object
:根本不明白解释要说的话。到底有什么好处? -
--enable-cxx-flags="-ffunction-sections -fstrict-aliasing -fno-exceptions"
:如果我在libstdc 中使用-fno-exceptions
,这是否意味着如果我使用libstdc ,我没有例外?使用-ffunction-sections
,但是在哪里放置-Wl,-gc-sections
?
尽管我总是使用--enable-lto
,但是使用LD.BFD,与著名的金链接相比,它似乎没有用。
如果您有更多标志,您认为我应该尝试,请告诉我!
- 禁用libstdcxx-verbose:我很少使用异常 因此,我对它的工作原理并不熟悉。我从未见过 它之前提到的"详细消息"。
1,您通常不会遇到错误,这些错误触发了这些友好的错误消息,您可以避免为它们付款。
- 启用链接构建-ID和 - Enable-gnu-nique-object: 根本不明白解释要说的话。 到底有什么好处?
没有。
唯一对象是一个设计不佳的功能,可防止共享库,其中包含对全球使用的对象(通常是VTABLES)的引用在dlclose
上卸载。AFAIR默认启用了(因为需要在共享libs环境中模拟C 语义)。
需要构建ID来支持单独的debuginfo。
- 启用cxx-flags =" - ffunction section -fstrict-aliasing -fno-exceptions":
您不会从-fstrict-aliasing
中受益,因为它在-O2
启用,默认情况下。
- 填充段,但是在哪里放置-wl,-gc sempempe?
也要到 --enable-cxx-flags
(请注意,它想要双折,即-Wl,--gc-sections
)。
尽管我总是使用 - eNable-lto,但与ld.bfd一起使用, 与著名的黄金接头相比,它似乎没有用。
此标志只能在GCC中启用LTO支持(实际上等同于将LTO添加到--enable-languages
)。除非您在CXXFLAGS
中也启用-flto
,否则它不会引起任何差异。请记住,LTO通常会增加可执行文件的规模(因为编译器将有更多的内部机会)。
如果您有更多的旗帜,您认为我应该尝试,请让我知道!
说到尺寸降低,我要说的是-ffunction-sections
是您最好的选择(请务必验证配置机械正确通过所有选项,而LibstDC 。确实每个功能具有一个部分)。您也可以添加-fdata-sections
。