4

我是 OpenCV 的新手,也是这个小组的新手。目前我正在开发一些需要 OpenCV 库的 android 手机 ICS 项目。我的模块代码是用 C 编写的,在该代码中我想调用一些 OpenCV lib 函数。刚开始,我已经下载了适用于 android 平台的 OpenCV-2.4.0。

  • 到目前为止我已采取的步骤:

    1. 将 .a 和 .so 文件从 \OpenCV-2.4.0-android-bin.tar\OpenCV-2.4.0-android-bin\OpenCV-2.4.0\libs\armeabi-v7a 复制到我的模块文件夹中
    2. 将 .h 文件从 \OpenCV-2.4.0-android-bin.tar\OpenCV-2.4.0-android-bin\OpenCV-2.4.0\include 复制到我的模块文件夹中
    3. 在我模块的 android.mk 文件中添加 .h 、.a 和 .so 路径。
    4. 执行构建。

现在我在 libopencv_core.a 中遇到链接错误当我从 .mk 文件中删除 libopencv_core.a 时,构建成功。我认为 libopencv_core.a 对这些函数(gzopen、gzclose 等)的其他库有依赖性

prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/jaguark/obj/STATIC_LIBRARIES/libopencv_core_intermediates/libopencv_core.a(persistence.cpp.o): in function icvPuts(CvFileStorage*, char const*):persistence.cpp(.text._ZL7icvPutsP13CvFileStoragePKc+0x20): error: undefined reference to 'gzputs'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/jaguark/obj/STATIC_LIBRARIES/libopencv_core_intermediates/libopencv_core.a(persistence.cpp.o): in function icvGets(CvFileStorage*, char*, int):persistence.cpp(.text._ZL7icvGetsP13CvFileStoragePci+0x26): error: undefined reference to 'gzgets'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/jaguark/obj/STATIC_LIBRARIES/libopencv_core_intermediates/libopencv_core.a(persistence.cpp.o): in function icvXMLSkipSpaces(CvFileStorage*, char*, int):persistence.cpp(.text._ZL16icvXMLSkipSpacesP13CvFileStoragePci+0x1e2): error: undefined reference to 'gzgets'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/jaguark/obj/STATIC_LIBRARIES/libopencv_core_intermediates/libopencv_core.a(persistence.cpp.o): in function icvXMLSkipSpaces(CvFileStorage*, char*, int):persistence.cpp(.text._ZL16icvXMLSkipSpacesP13CvFileStoragePci+0x208): error: undefined reference to 'gzeof'
prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: out/target/product/jaguark/obj/STATIC_LIBRARIES/libopencv_core_intermediates/libopencv_core.a(persistence.cpp.o): in function icvXMLSkipSpaces(CvFileStorage*, char*, int):persistence.cpp(.text._ZL16icvXMLSkipSpacesP13CvFileStoragePci+0x33c): error: undefined reference to 'gzeof'
4

1 回答 1

3

您可以按照这些教程了解如何将 OpenCV 用于 android 项目和NDK-build。一开始有点棘手。我也遇到了一个库的问题,每次编译后它都消失了,我每次都必须一次又一次地包含。

于 2012-05-30T09:54:25.810 回答