https://developer.android.com/ndk/guides/cmake?hl=zh-cn
https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-android-with-the-ndk
NDK 通过工具链文件支持 CMake。工具链文件是用于自定义交叉编译工具链行为的 CMake 文件。用于 NDK 的工具链文件位于 NDK 中的 /build/cmake/android.toolchain.cmake 内。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #/bin/bash
export ANDROID_NDK=/opt/env/android-ndk-r14b
rm -r build mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI="armeabi-v7a" \ -DANDROID_NDK=$ANDROID_NDK \ -DANDROID_PLATFORM=android-22 \ ..
make && make install
cd ..
|
opencv NDK 编译
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_TOOLCHAIN_FILE=/Users/zauther/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake \ -D ANDROID_TOOLCHAIN=clang \ -D PYTHON_DEFAULT_EXECUTABLE=$(python -c "import sys; print(sys.executable)") \ -D PYTHON3_EXECUTABLE=$(python -c "import sys; print(sys.executable)") \ -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python -c "import numpy; print (numpy.get_include())") \ -D PYTHON3_INCLUDE_PATH=/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Headers \ -D PYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \ -D PYTHON2_EXECUTABLE=/Users/zauther/Downloads/head_file/AliNNPython \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/Users/zauther/Downloads/head_file \ -D PYTHON2_INCLUDE_PATH=/Library/Frameworks/Python.framework/Versions/2.7/Headers \ -D PYTHON2_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \ -D CMAKE_CXX_FLAGS="-std=c++11" \ -D CMAKE_C_FLAGS="-D__ANDROID_API__=26" \ -D ANDROID_NDK=/Users/zauther/Library/Android/sdk/ndk-bundle \ -D ANDROID_ABI="arm64-v8a" \ -D ANDROID_NATIVE_API_LEVEL=android-26 \ -D ANDROID_NO_UNDEFINED=ON \ -D BUILD_opencv_python3=ON \ -D BUILD_opencv_python2=ON \ -D ANDROID_SO_UNDEFINED=OFF \ -D DBUILD_SHARED_LIBS=ON \ -D ENABLE_SOLUTION_FOLDERS=ON \ ../opencv/
make opencv_python2 make opencv_python3 ninja -j 8 # -GNinja \
|
需要使用android 24以上,https://android.googlesource.com/platform/bionic/+/master/libc/include/bits/fortify/unistd.h 中的__write_chk以来24以上的版本。
NDK编译问题
- bionic/libc/include/bits/fortify/stdio.h:43: error
https://www.jianshu.com/p/9079766aa28c
问题是android不同版本支持的api有变动,需要使用高版本的android,api列表如下:
https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#available-in-api-level-23
一般位于NDK 中的 /build/cmake/android.toolchain.cmake 内。