0

我正在尝试将 win7 (32b) 中的 QT5.2.0 beta 1 与 opencv 和 android 集成以进行本机 c++ 开发。不幸的是我没能成功。(此外,我也尝试过 necessitas,但没有运气。)应用程序可以在桌面上运行,但是当我尝试为 android 工具包(x86 或 arm7s)编译时,我在构建过程中遇到与“lopencv_highgui.a”相关的错误,例如

“C:/OpenCV-2.4.6-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_highgui.a(grfmt_exr.cpp.o): 在函数cv::ExrDecoder::ExrDecoder()':grfmt_exr.cpp:(.text._ZN2cv10ExrDecoderC2Ev+0x82): undefined reference toImf::Chromaticities::Chromaticities(Imath::Vec2 const& , Imath::Vec2 const&, Imath::Vec2 const&, Imath::Vec2 const&)'"

我使用了带有几个 NDK(r8b、r8e、r9)版本的清晰设置

  • “C:\adt-bundle-windows-x86-20130917”(托管 API 16、17、18)
  • "C:\apache-ant-1.9.2\bin\ant.bat"
  • “C:\Program Files (x86)\Java\jdk1.7.0_45”(在系统环境变量中设置 JAVA_HOME。)
  • "C:\OpenCV-2.4.6-android-sdk" & ""C:\OpenCV-2.4.6"
  • “C:\Qt\Qt5.2.0\5.2.0-beta1\mingw48_32”(sys.env.vars 中的 QTDIR。)

我尝试了以下解决方案

  • 我按照定义重新排序了 pro 文件中的 opencv 库。
  • 我检查了 sh.exe 的存在(不存在)
  • 我将 tools.jar 从 jdk 复制到“C:\Program Files (x86)\Java\jre7\lib”文件夹

我将 Genymotion 用于带有 NEXUS S 4.2.2 x86 (API17) 和 Galaxy Nexus 4.1.1 x86 (API16) 的虚拟 android 环境。

我可以在模拟器上编译、部署和运行一些 Qt 示例(没有 Opengls 和没有 opencv),但我无法在简单的 opencv 应用程序上取得任何成功。(PS:该应用程序正在桌面上运行)

我想我需要一个简单的运行 Qt opencv android 示例,具有正确的 pro、user 和其他配置,以找到正确的解决方案并定义错误。

任何人都可以分享一个工作样本吗?

4

1 回答 1

0

由于 pro 文件 (libIlmImf.a) 中缺少库定义而出现此问题。

pro文件中更正的库定义如下:

ANDROID_OPENCV = C:/OpenCV-2.4.6-android-sdk/sdk/native
LIBS += \
$$ANDROID_OPENCV/libs/x86/libopencv_contrib.a \
$$ANDROID_OPENCV/libs/x86/libopencv_legacy.a \
$$ANDROID_OPENCV/libs/x86/libopencv_ml.a \
$$ANDROID_OPENCV/libs/x86/libopencv_objdetect.a \
$$ANDROID_OPENCV/libs/x86/libopencv_calib3d.a \
$$ANDROID_OPENCV/libs/x86/libopencv_video.a \
$$ANDROID_OPENCV/libs/x86/libopencv_features2d.a \
$$ANDROID_OPENCV/libs/x86/libopencv_highgui.a \
$$ANDROID_OPENCV/libs/x86/libopencv_androidcamera.a \
$$ANDROID_OPENCV/libs/x86/libopencv_flann.a \
$$ANDROID_OPENCV/libs/x86/libopencv_imgproc.a \
$$ANDROID_OPENCV/libs/x86/libopencv_core.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/libIlmImf.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibpng.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibtiff.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibjpeg.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/liblibjasper.a \
$$ANDROID_OPENCV/3rdparty/libs/x86/libtbb.a
  • (但是由于“着色器程序未链接”导致在android模拟器中运行时出现另一个问题。我仍在努力,但这是另一个问题的问题)
  • 编辑:我通过将模拟器从 GenyMotion 切换到 AVD(NEXUS S、API17、w/o googleapi、x86)并设置“使用主机 GPU”标志并添加 CONFIG+= opengl 解决了“着色器程序未链接”的问题到专业档案
于 2013-11-07T22:09:54.830 回答