【问题标题】:How can I create *.so files to Dynamically Link OpenCV for Android?如何创建 *.so 文件以动态链接 OpenCV for Android?
【发布时间】:2017-03-12 05:00:27
【问题描述】:

我想从 OpenCV 2.4.x 源文件生成 libopencv_java.so 文件,从 OpenCV 3.x.x 源文件生成 libopencv3_java.so,以便能够将 OpenCV 库动态链接到我的 Android 应用程序。

虽然我可以通过 CMake 和 MinGW 在基于 Win64 的开发机器上为“armeabi-v7a”使用“Unix makefiles”从主干重建静态链接的 *.a 库文件(例如 libopencv_core.a 和 libopencv_imgproc.a), arm64-v8a、x86 和 x86_64" 目标;我无法重现动态链接的 libopencv_java 和 libopencv3_java.so 文件,并且在 OpenCV 网站或任何其他知识库上找不到有关此问题的任何相关信息。

谁能向我解释如何通过 CMake 和 MinGW 在基于 Win64 的开发机器上生成这些 *.so 文件?我想对一些 OpenCV 源文件做些小改动,然后从头开始重现所有内容。

只要能正常工作,使用“Unix makefiles”或“MinGW makefiles”或任何其他配置并不重要。

提前致谢

【问题讨论】:

  • 所以,如果我了解您想使用 cmake 和 unix makefile 链接您的 opencv 库,对吗?您能否发布您的 cmake 脚本以及您使用的是什么工具链?
  • 我想从我从其 GitHub 存储库和 afaik 下载的 OpenCV 源代码为 Android 生成“opencv_java”共享库,无论如何,cmake 是生成必要构建文件的唯一选择。我也想使用 Unix makefile,所以是的。该工具链由 Android NDK 提供。问题是,我在生成的构建脚本中看不到“opencv_java”目标。因此,虽然我可以生成静态库文件(例如 libopencv_calib3d.a),但是当我为任何目标平台(例如“armeabi-v7a”)“make -j4”生成的 makefile 时,我无法生成 libopencv_java3.so 共享库文件。

标签: android c++ opencv android-ndk cmake


【解决方案1】:

对于那些将来可能会遇到类似问题的人,我通过将针对特定架构(armeabi-v7a、arm64-v8a、x86、x86_64 等)新创建的 *.a 文件放入他们的在 OpenCV Android 预建库文件夹下的适当位置,并通过我自己的 Android.mk 和 Application.mk 文件在该文件夹下重建“libopencv_java3.so”。我也只在“BUILD_opencv_java”和“BUILD_FAT_JAVA_LIB”组件的代码生成阶段使用了 Python 3,而不是同时使用 Python 2 和 Python 3。

【讨论】:

  • 您能详细说明一下吗?我面临与您的问题相同的问题,但不明白您所说的“OpenCV Android 预建库”是什么意思,以及 Android.mk 和 Application.mk 文件应该是什么样子。
【解决方案2】:

为了生成opencv_java需要做的是你需要在你的系统中安装python2、java、ant-executable。如果我猜对了,你必须使用 cmake 来生成 .a 文件。如果您使用一些不同的方法,请按照以下链接中的步骤操作: http://amin-ahmadi.com/2017/08/13/how-to-build-opencv-3-3-x-for-android/ 按照上面链接中提到的步骤,您应该能够生成 opencv_java 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多