Link在 NDK 中启用 Link 时间优化时出错

Linker error when enabling Link Time Optimization in NDK

当我将标志 -flto 添加到我的 NDK C++ 项目时,linker 发出以下错误:"Optimization level must be between 0 and 3",即使我的优化级别通过 -O3.

有人知道怎么解决吗?

编译器标志通过 Gradle 传递,据我所知,应该将标志传递给 Clang 编译器和 linker。当我删除 -flto 标志时,一切正常。

备注:

答案分为两部分:

错误是由https://github.com/android-ndk/ndk/issues/721引起的。 Clang 的 LTO 插件不接受 -Os-Oz。这是一个错误。

Okay, I might be really stupid, I suppose between 0 and 3 means 1 or 2 :)

实际上是因为您不能使用通用的 cppFlags 来设置优化级别。这对应于 CMAKE_CXX_FLAGS,您需要在 CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE 中设置它们(and/or 它们的 C 风格)。 CMake 在这些变量中有自己的默认值,命令行构建为 ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE},因此您的 -O3 被默认覆盖。