我想通过构建最新的gcc 6.3.0来研究我的另一个问题(gcc: Strip unused functions)的方法。
我想尝试一些来自https://gcc.gnu.org/install/configure.html和https://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,与着名的黄金链接器相比,它似乎毫无用处。
如果你有更多的旗帜,你认为我应该尝试,请告诉我!
答案 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
。