google 提供的 android ndk 无法编译对 c++11 函数的调用,例如std::to_string()
and std::stoul
等等{我曾尝试过r10b
来自官方网站的一张}。所以SO中的建议是尝试crystax NDK
。我已经下载并将根文件夹放在谷歌的NDK旁边。我在根 CMakeLists.txt 文件中所做的更改是:
from:
set(PLATFORM_PREFIX "/some-path/android-ndk-r10b/platforms/android-19/arch-arm")
set(PLATFORM_FLAGS "-fPIC -Wno-psabi --sysroot=${PLATFORM_PREFIX}")
set(CMAKE_CXX_FLAGS "${PLATFORM_FLAGS} -march=armv7-a -mfloat-abi=softfp -mfpu=neon" CACHE STRING "")
To:
set(PLATFORM_PREFIX "/some-path/android-ndk-r8-crystax-1/platforms/android-14/arch-arm")
set(PLATFORM_FLAGS "-fPIC -Wno-psabi --sysroot=${PLATFORM_PREFIX}")
set(CMAKE_CXX_FLAGS "${PLATFORM_FLAGS} -march=armv7-a -mfloat-abi=softfp -mfpu=neon" CACHE STRING "")
和 cmake 命令行来自:
cmake .. -DCMAKE_CXX_COMPILER=/some-path/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -DCMAKE_C_COMPILER=/some-path/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -DANDROID_BUILD=ON -DANDROID_NDK_ROOT=/some-path/android-ndk-r10b
To:
cmake .. -DCMAKE_CXX_COMPILER=/some-path/android-ndk-r8-crystax-1/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -DCMAKE_C_COMPILER=/some-path/android-ndk-r8-crystax-1/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -DANDROID_BUILD=ON -DANDROID_NDK_ROOT=/some-path/android-ndk-r8-crystax-1
即,从普通 ndk 更改为crystax-ndk。该程序之前编译得很好,直到它尝试通过调用 std::to_string() 等来编译一个文件。但是在更改之后,Cmake 给出了一个错误,表明它无法编译一个简单的测试程序,因为:
/some-path/android-ndk-r8-crystax-1/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.7/../../../../arm-linux-androideabi/bin/ld:
error: cannot find -lcrystax
我可以在目录中看到 libcrystax.a 和 .so:
/some-path/android-ndk-r8-crystax-1/sources/crystax/libs/armeabi-v7a
我也尝试在 CMakeLists.txt 文件的开头添加 link_directories("path-to-above") ,但这也没有解决问题。
它应该在那里找到它(在我提供上面的 --sysroot 等之后),就像普通的 ndk 一样。那么这个问题应该如何解决呢?还有其他要设置的 cmake 变量吗?