当前位置: 首页 > article >正文

ndk 编译opencv(去除libandroid.so mediandk依赖)

简单的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

http://www.kler.cn/a/540428.html

相关文章:

  • 502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
  • 使用sunshine和moonlight串流时的音频输出问题
  • http常用状态码
  • 常用的python库-安装与使用
  • SpringBoot速成(八)登录实战:未登录不能访问 P5-P8
  • 【Python】元组
  • 单片机复杂项目的软件分层设计
  • 构建jdk17包含maven的基础镜像
  • [安装FlashAttention] CUDA版本 和 Nvidia驱动版本
  • [Unity角色控制专题] 详细解释如何使用Character Controller配合脚本实现跳跃功能与落地抖动?
  • docker的卷映射如何手动指定位置
  • 信创领域的PostgreSQL管理员认证
  • 2.10学习总结
  • Qt中QTreeWidget的使用
  • 查出 product 表中所有 detail 字段包含 xxx 的完整记录
  • Linux常用命令——磁盘管理类
  • RTD2775QT/RTD2795QT瑞昱显示器芯片方案
  • Python 项目中创建虚拟环境(Virtual Environment)
  • JAVA 学习路线 学习大纲(java 进阶路线)
  • 利用子问题思路解决二叉树相关Oj题
  • 基于蜘蛛蜂优化算法的无人机集群三维路径规划Matlab实现
  • 力扣 单词拆分
  • 【网络安全.渗透测试】Cobalt strike(CS)工具使用说明
  • 测试某操作系统通过dd和UltraISO两种方式安装服务器(ARM)
  • 利用二分法进行 SQL 时间盲注
  • 科研工作中如何高效利用LabVIEW