【问题标题】:gcc configure option explanationsgcc 配置选项说明
【发布时间】:2016-12-28 23:51:39
【问题描述】:

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

https://gcc.gnu.org/install/configure.htmlhttps://gcc.gnu.org/onlinedocs/libstdc++/manual/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,跟大名鼎鼎的gold linker比起来好像没什么用。

如果您认为我应该尝试更多标志,请告诉我!

【问题讨论】:

  • 不清楚且与两种不同的编程语言 C 或 C++ 中的任何一种都无关。

标签: gcc linker libstdc++


【解决方案1】:

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

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

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

没有。

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

需要构建 ID 来支持separate debuginfo

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

您不会从-fstrict-aliasing 中受益,因为它默认在-O2 或更高版本启用。

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

也发送至--enable-cxx-flags(注意它需要双破折号,即-Wl,--gc-sections)。

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

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

如果您认为我应该尝试更多标志,请告诉我!

说到减小尺寸,我想说-ffunction-sections 是你最好的选择(一定要验证配置机器是否正确传递了所有选项,并且 libstdc++.a 确实每个函数都有一个部分)。您也可以添加-fdata-sections

【讨论】:

  • 原来-ffunction-sections -fdata-sections 已经用于 libstdc++ 而没有在--enable-cxx-flags 中指定。 -Wl,--gc-sections 是不必要的,因为 libstdc++ 中没有链接步骤,我将在构建程序时使用此标志。跳过--enable-linker-build-id--enable-gnu-unique-object。试过--disable-libstdcxx-verbose。再次测试了我的stackoverflow.com/questions/40856787/gcc-strip-unused-functions,没有任何改善。我只能说 gcc 6.3.0 + binutils 2.27 在 COFF/PE 上的表现相当糟糕。如果只有 Windows 支持 ELF。
  • "gcc 6.3.0 + binutils 2.27 在 COFF/PE 上的表现相当糟糕" - 是的,这是事实。请注意,除非您以某种方式通知 Cygwin/MinGW 开发人员(并为他们提供 repro),否则这不会改变。
  • 我在sourceforge.net/p/mingw-w64/bugs/578 提交了一个bug,希望得到一些关注。感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多