当我尝试使用Android Studio和cmake为Android构建C ++可执行文件(使用类似于this answer的方法)时,我向build.gradle
添加了以下代码:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_DISABLE_NO_EXECUTE=TRUE"
}
}
}
}
分级转储:
CMake Error at /home/user/Android/Sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler
"/home/user/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang"
is not able to compile a simple test program.
.......
[1/2] Building C object CMakeFiles/cmTC_817b2.dir/testCCompiler.c.o
FAILED:
/home/user/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
--target=armv7-none-linux-androideabi
--gcc-toolchain=/home/user/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
--sysroot=/home/user/Android/Sdk/ndk-bundle/sysroot -isystem
/home/user/Android/Sdk/ndk-bundle/sysroot/usr/include/arm-linux-androideabi
-D__ANDROID_API__=23 -g -DANDROID -ffunction-sections -funwind-tables
-fstack-protector-strong -no-canonical-prefixes -march=armv7-a
-mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--execstack -Wformat
-Werror=format-security -fPIE -o
CMakeFiles/cmTC_817b2.dir/testCCompiler.c.o -c
/dev/shm/android-ndk-master/hello-jni/app/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeTmp/testCCompiler.c
clang: error: unsupported argument '--execstack' to option 'Wa,'
ninja: build stopped: subcommand failed.
但是,如果我设置了ANDROID_TOOLCHAIN=gcc
或ANDROID_DISABLE_NO_EXECUTE=FALSE
,它会编译没有错误。
从日志看来,此错误似乎是由clang不接受但gcc接受的参数引起的,所以我想知道我是否错过了某些东西,或者这是Android NDK的错误?我没有找到使用Google的任何线索。
我可以在一个简单的项目(例如this example project)中重现此错误。将这两个参数添加到app/build.gradle
后,它无法构建。
环境:Arch Linux。 Android NDK r17b。
谢谢。