我想使用新的 android ndk r8e 编译源代码(SDL 和类似的东西)。更改日志指出“在 GCC 4.7、4.6、Clang 3.2 和 Clang 3.1 中启用 -flto”。所以我在 LOCAL_CFLAGS、LOCAL_CPPFLAGS 和 LOCAL_LDFLAGS 中添加了 -flto。但是链接器调用中没有优化和架构标志,因此没有进行优化(又名慢二进制)。链接器也会失败,因为它无法从某些 .S 文件中找到函数,并且某些指令在拇指模式下不可用。没有 -flto 一切正常。
那么如何正确使用链接时优化以及如何避免这个问题呢?不,将我自己的优化/架构标志添加到 LOCAL_LDFLAGS 是没有答案的,因为我想使用 NDK 而不是我自己的 hacky 构建脚本。
链接时优化也在 amd64(非安卓)上使用自己的构建脚本进行了测试,效果很好(编译、链接和 20% 的速度优势)。所以请保留 NDK 构建系统的答案。