简单的bash运行
需要关注的:
- OPENCV_EXTRA_MODULES_PATH : opencv contrib库
- BUILD_opencv_XXX :添加contrib库后默认是contrib库全部编译,用这个控制需要关闭的
- NDK的路径
export ANDROID_NDK=/media/hello/data/3rd_party/25.2.9519653
# rm -rf ndk_build
# mkdir ndk_build
cd ndk_build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_NDK=$ANDROID_NDK \
-DANDROID_PLATFORM=android-29 \
-DANDROID_STL=c++_shared \
-DOPENCV_EXTRA_MODULES_PATH=/media/hello/data/3rd_party/opencv4.6.0/opencv_contrib/modules \
-DBUILD_JAVA=OFF \
-DBUILD_FAT_JAVA_LIB=OFF \
-DBUILD_ANDROID_EXAMPLES=OFF \
-DWITH_ONNX=ON \
-Dfreetype_DIR=/media/hello/data/3rd_party_lib/freetype/2.13.2/arm64-v8a/lib/cmake/freetype/ \
-DFREETYPE_INCLUDE_DIRS=/media/hello/data/3rd_party_lib/freetype/2.13.2/arm64-v8a/include/freetype2 \
-DFREETYPE_LIBRARIES=/media/hello/data/3rd_party_lib/freetype/2.13.2/arm64-v8a/lib/libfreetype.so \
-Dharfbuzz_DIR=/media/hello/data/3rd_party_lib/harfbuzz/9.0.0/arm64-v8a/lib/cmake/harfbuzz/ \
-DHARFBUZZ_INCLUDE_DIRS=/media/hello/data/3rd_party_lib/harfbuzz/9.0.0/arm64-v8a/include/harfbuzz \
-DHARFBUZZ_LIBRARIES=/media/hello/data/3rd_party_lib/harfbuzz/9.0.0/arm64-v8a/lib/libharfbuzz.so \
-DWITH_FREETYPE=ON \
-DBUILD_opencv_freetype=ON \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DWITH_ARUCO=OFF \
-DBUILD_opencv_barcode=OFF \
-DBUILD_opencv_bgsegm=OFF \
-DBUILD_opencv_datasets=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=OFF \
-DBUILD_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX=/media/hello/data/3rd_party_lib/opencv/4.6.0/arm64-v8a \
-DCMAKE_CXX_FLAGS="-frtti -Os" \
-DCMAKE_C_FLAGS="-Os"
make -j$(nproc)
make install
在libopencv_videoio.so中会包含
hello@hello:/media/hello/data/3rd_party/opencv4.6.0/opencv-4.6.0$ objdump -x /media/hello/data/3rd_party_lib/opencv/4.6.0/arm64-v8a-src/sdk/native/libs/arm64-v8a/libopencv_videoio.s
o |grep NEEDED
NEEDED libopencv_imgcodecs.so
NEEDED libdl.so
NEEDED liblog.so
NEEDED libopencv_imgproc.so
NEEDED libopencv_core.so
NEEDED libandroid.so
NEEDED libmediandk.so
NEEDED libcamera2ndk.so
NEEDED libc++_shared.so
NEEDED libc.so
对于简单的应用不需要和android互操作的,想要去除libandroid.so libmediandk.so的依赖:
在modules/videoio/cmake/init.cmake中注释掉下面这两个
# add_backend("android_mediandk" WITH_ANDROID_MEDIANDK)
# add_backend("android_camera" WITH_ANDROID_NATIVE_CAMERA)
去除后
hello@hello:/media/hello/data/3rd_party/opencv4.6.0/opencv-4.6.0$ objdump -x /media/hello/data/3rd_party_lib/opencv/4.6.0/arm64-v8a/sdk/native/libs/arm64-v8a/libopencv_videoio.so |grep NEEDED
NEEDED libopencv_imgcodecs.so
NEEDED libdl.so
NEEDED libopencv_core.so
NEEDED libc++_shared.so
NEEDED libc.so