gcc配置选项说明

时间:2016-12-28 23:51:40

标签: gcc linker libstdc++

我想通过构建最新的gcc 6.3.0来研究我的另一个问题(gcc: Strip unused functions)的方法。

我想尝试一些来自https://gcc.gnu.org/install/configure.htmlhttps://gcc.gnu.org/onlinedocs/libstdc++/manual/configure.html的选项,但不明白它们的含义。

具体来说,这些是我想尝试的标志:

  • https://google.com http://fakesite.net/php?id=2 https://example.com/ http://anotherexample.com/pho?admin=2 :我很少使用例外,所以我不太熟悉它是如何工作的。我从未见过它之前提到的“详细信息”。
  • --disable-libstdcxx-verbose--enable-linker-build-id:根本不明白解释的内容。究竟有什么好处?
  • --enable-gnu-unique-object:如果我在libstdc ++中使用--enable-cxx-flags="-ffunction-sections -fstrict-aliasing -fno-exceptions",这是否意味着如果我使用libstdc ++,我没有例外?使用-fno-exceptions,但放置-ffunction-sections
  • 的位置

虽然我总是使用-Wl,-gc-sections,但是使用ld.bfd,与着名的黄金链接器相比,它似乎毫无用处。

如果你有更多的旗帜,你认为我应该尝试,请告诉我!

1 个答案:

答案 0 :(得分:3)

  

- disable-libstdcxx-verbose:我很少使用异常   所以我不太熟悉它是如何工作的。我从未见过   它之前提到的“详细信息”。

+1,您通常不会遇到errors,这会触发这些友好的错误消息,您可以避免为此付费。

  

- enable-linker-build-id和--enable-gnu-unique-object:   根本不明白解释是什么想说的。   有什么好处?

没有。

唯一对象是一个设计糟糕的功能,可以防止包含对全局使用的对象(通常是vtable)的引用的共享库在dlclose上卸载。 AFAIR默认启用它(因为它需要模拟共享库环境中的C ++语义)。

需要构建ID来支持separate debuginfo

  

- enable-cxx-flags =“ - ffunction-sections -fstrict-aliasing -fno-exceptions”:

默认情况下,-fstrict-aliasing及更高版本启用-O2,您将无法从--enable-cxx-flags中受益。

  

使用-ffunction-sections,但在哪里放-Wl,-gc-sections?

也要-Wl,--gc-sections(注意它需要双击,即--enable-languages)。

  

虽然我总是使用--enable-lto,但是使用ld.bfd,   与着名的黄金链接器相比,它似乎毫无用处。

这个标志只是在GCC中启用LTO支持(它实际上相当于将lto添加到-flto)。除非您在CXXFLAGS中启用-ffunction-sections,否则不会产生任何差异。请记住,LTO通常会增加可执行文件的大小(因为编译器将有更多的内联机会)。

  

如果你有更多的旗帜,你认为我应该尝试,请告诉我!

说到缩小尺寸,我会说-fdata-sections是你最好的选择(确保验证配置机器正确传递所有选项和libstdc ++。确实每个函数有一个部分)。您还可以添加UINavigationController