在NDK中启用链接时间优化时出现链接器错误

时间:2019-05-21 12:11:15

标签: c++ android-ndk android-gradle clang++

当我将标记-flto添加到我的NDK C ++项目中时,链接器将发出以下错误:“优化级别必须介于0到3之间”,即使我的优化级别通过{{1 }}

有人知道如何解决吗?

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

注释:

  • 我正在使用NDK 19.2(撰写本文时为最新版本)。

  • 我还会收到警告-flto,如果我不进行链接时间优化就可以进行编译。

1 个答案:

答案 0 :(得分:1)

答案的两个部分:

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

  

好吧,我可能真的很愚蠢,我想介于0和3之间表示1或2:)

这实际上是因为您不能使用通用的cppFlags来设置优化级别。这对应于CMAKE_CXX_FLAGS,并且您需要在CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE中设置它们(和/或其中的C类)。 CMake在这些变量中有其自己的默认值,并且命令行以${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}构建,因此默认情况下将覆盖-O3