【发布时间】:2018-06-22 08:48:03
【问题描述】:
使用:Andorid Studio 3.1.3、NDKr17b、gradle plugin 3.1.3、gradle-4.5.1-all.zip
我无法使用 cmake 生成共享库的任何发布版本,它失败并显示以下内容:
arm-linux-androideabi/bin/ld: fatal error: Optimization level must be between 0 and 3
这是我使用的 cmake 发布配置
release {
externalNativeBuild {
cmake {
arguments "-DCMAKE_BUILD_TYPE=Release",
"-DANDROID_CPP_FEATURES=rtti exceptions",
"-DANDROID_STL=c++_static",
"-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"
cppFlags "-ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -Os"
cFlags "-ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -Os"
}
}
consumerProguardFiles 'proguard-project.txt'
}
我发现使用以下选项调用 ld:
-plugin /home/myhome/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/LLVMgold.so -plugin-opt=mcpu=generic -plugin-opt=Os -plugin-opt=-function-sections -plugin-opt=-data-sections
问题是“-plugin-opt=Os”的存在,当我运行没有此选项的命令时,它会链接,即使所有源代码都以适当的优化级别编译。 使用与 ndk-build 相同的配置可以正常工作(ld 调用没有这样的选项,它只是加载 LLVMgold.so 插件,没有 --plugin-opt=Os)。
所以我的问题是为什么要应用此选项“-plugin-opt=Os”,我该如何删除它?这是来自 cmake 还是来自 ninja?
【问题讨论】:
标签: gradle cmake android-ndk