GCC配置选项说明



我想通过构建最新的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

最新更新