当我将标记-flto
添加到我的NDK C ++项目中时,链接器将发出以下错误:“优化级别必须介于0到3之间”,即使我的优化级别通过{{1 }}
有人知道如何解决吗?
编译器标志通过Gradle传递,据我所知,Gradle应该将标志传递给Clang编译器和链接器。当我删除-O3.
标志时,一切正常。
注释:
我正在使用NDK 19.2(撰写本文时为最新版本)。
我还会收到警告-flto
,如果我不进行链接时间优化就可以进行编译。
答案 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_DEBUG
和CMAKE_CXX_FLAGS_RELEASE
中设置它们(和/或其中的C类)。 CMake在这些变量中有其自己的默认值,并且命令行以${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}
构建,因此默认情况下将覆盖-O3
。