C ++代码无法使用TOOLCHAIN = clang和DISABLE_NO_EXECUTE = true生成

时间:2018-06-26 13:21:46

标签: android android-ndk

当我尝试使用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=gccANDROID_DISABLE_NO_EXECUTE=FALSE,它会编译没有错误。

从日志看来,此错误似乎是由clang不接受但gcc接受的参数引起的,所以我想知道我是否错过了某些东西,或者这是Android NDK的错误?我没有找到使用Google的任何线索。

我可以在一个简单的项目(例如this example project)中重现此错误。将这两个参数添加到app/build.gradle后,它无法构建。

环境:Arch Linux。 Android NDK r17b。

谢谢。

0 个答案:

没有答案