android - QT Widget 使用 OpenCV 错误部署到 Android

标签 android c++ qt opencv android-ndk

<分区>

我想创建一个 QT 小部件 (C++) 并使用 OpenCV 库 (C++) 并将其部署到 Android。

我已经安装了 QT for Android 和 http://qt-project.org/doc/qt-5/androidgs.html 中提到的必要文件例如 NDK、SDK 等。mingw 编译器包含在 QT for Android 中,因此我不必再次安装它。

我可以毫无问题地将 QT 小部件部署到 android。问题是在 QT 小部件中使用 OpenCV 库,然后部署它。

我尝试了两种方法在我的 QT 项目中使用 OpenCV:

  1. 由于 QT for Android 附带 mingw 编译器,我使用 CMake 和 mingw 编译器从源代码编译了 OpenCV 库。然后我在 QT 的项目文件中包含了头文件并链接了库。此选项不起作用。我已经习惯了这种包含的方法,也想以同样的方式使用其他库,例如 Boost 和 Eigen。

  2. 我已经下载了 OPENCV android SDK 并包含了它的头文件,并将它的库链接到 QT 的项目文件中。这仍然没有奏效。

基本上我只想用 C++ 编写代码,因此使用小部件而不是 qtquick(qml)。请告诉我以上步骤中哪些(如果有的话)是正确的以及我必须进行哪些更改。

另一方面,有谁知道我可以如何加速模拟器,我有一个 AMD 处理器,所以不能利用英特尔工具。我在哪里可以获得三星 Note 4 的 AVD 设置?

非常感谢!!

选项 1 的项目文件:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test3
TEMPLATE = app


LIBS+= C:\programs\opencv\RELEASE\lib\\\*
INCLUDEPATH+= C:\programs\opencv\RELEASE\install\include\

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

CONFIG += mobility
MOBILITY = 

选项 1 的错误:

12:18:17: Starting: "C:\programs\QT\Tools\mingw482_32\bin\mingw32-make.exe" 
C:\programs\QT\5.3\android_armv7\bin\qmake.exe -spec android-g++ CONFIG+=debug -o Makefile ..\test3\test3.pro
The system cannot find the path specified.
C:\programs\android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-g++ --sysroot=C:\programs\android-ndk-r10c/platforms/android-9/arch-arm/ -Wl,-soname,libtest3.so -Wl,--no-undefined -Wl,-z,noexecstack -shared -o libtest3.so main.obj mainwindow.obj moc_mainwindow.obj   -LC:\programs\android-ndk-r10c/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a -LC:\programs\android-ndk-r10c/platforms/android-9/arch-arm//usr/lib C:\programs\opencv\RELEASE\lib\\* -LC:/programs/QT/5.3/android_armv7/lib -lQt5Widgets -Lc:\Utils\android\ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a -Lc:\Utils\android\ndk/platforms/android-9/arch-arm//usr/lib -LC:\Utils\icu32_51_1_mingw482\lib -LC:\utils\postgresql\pgsql\lib -LC:\utils\mysql\mysql\lib -LC:\Utils\pgsql\lib -LC:\temp\opensll-android-master\openssl-android-master\lib -LC:\programs\QT\5.3\android_armv7/lib -lQt5Gui -lQt5Core -lGLESv2 -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc
..\..\opencv\RELEASE\install\include/opencv2/core/mat.hpp:278: error: undefined reference to 'cv::fastFree(void*)'
..\..\opencv\RELEASE\install\include/opencv2/core/mat.hpp:298: error: undefined reference to 'cv::Mat::copySize(cv::Mat const&)'
..\..\opencv\RELEASE\install\include/opencv2/core/mat.hpp:367: error: undefined reference to 'cv::Mat::deallocate()'
..\test3/main.cpp:23: error: undefined reference to 'cv::imread(std::string const&, int)'
..\test3/main.cpp:31: error: undefined reference to 'cv::namedWindow(std::string const&, int)'
..\test3/main.cpp:32: error: undefined reference to 'cv::_InputArray::_InputArray(cv::Mat const&)'
Makefile:82: recipe for target 'libtest3.so' failed
..\test3/main.cpp:32: error: undefined reference to 'cv::imshow(std::string const&, cv::_InputArray const&)'
..\test3/main.cpp:34: error: undefined reference to 'cv::waitKey(int)'
collect2.exe: error: ld returned 1 exit status
mingw32-make: *** [libtest3.so] Error 1
12:18:22: The process "C:\programs\QT\Tools\mingw482_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project test3 (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.3.2))
When executing step "Make"
12:18:22: Elapsed time: 00:04.

选项 2 的项目文件:

   #-------------------------------------------------
#
# Project created by QtCreator 2014-12-05T18:06:24
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test3
TEMPLATE = app

INCLUDEPATH+= C:\programs\opencvandroidsdk\sdk\native\jni\include

LIBS += -LC:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\
-lopencv_contrib \
-lopencv_legacy \
-lopencv_ml \
-lopencv_objdetect \
-lopencv_calib3d \
-lopencv_video \
-lopencv_features2d \
-lopencv_highgui \
-lopencv_androidcamera \
-lopencv_flann \
-lopencv_imgproc \
-lopencv_core

LIBS += -LC:\programs\opencvandroidsdk\sdk\native\3rdparty\libs\armeabi-v7a\
-llibjpeg \
-llibpng \
-llibtiff \
-llibjasper \
-ltbb \
-lIlmImf

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

CONFIG += mobility
MOBILITY =

选项 2 的错误:

18:24:53: Running steps for project test3...
18:24:53: Configuration unchanged, skipping qmake step.
18:24:53: Starting: "C:\programs\QT\Tools\mingw482_32\bin\mingw32-make.exe" 
mingw32-make: Nothing to be done for 'first'.
18:24:55: The process "C:\programs\QT\Tools\mingw482_32\bin\mingw32-make.exe" exited normally.
18:24:55: Starting: "C:\programs\QT\Tools\mingw482_32\bin\mingw32-make.exe" INSTALL_ROOT="C:\programs\QT projects\build-test3-Android_for_armeabi_v7a_GCC_4_9_Qt_5_3_2-Release\android-build" install
copy /y "libtest3.so" "C:\programs\QT projects\build-test3-Android_for_armeabi_v7a_GCC_4_9_Qt_5_3_2-Release\android-build\libs\armeabi-v7a\libtest3.so"
The system cannot find the path specified.
        0 file(s) copied.
Makefile:1627: recipe for target 'install_target' failed
mingw32-make: [install_target] Error 1 (ignored)
18:24:57: The process "C:\programs\QT\Tools\mingw482_32\bin\mingw32-make.exe" exited normally.
Error while building/deploying project test3 (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.3.2))
When executing step "Deploy to Android device"
18:27:00: Elapsed time: 02:07.

最佳答案

对于选项 2:

改变

LIBS += \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_contrib.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_legacy.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_ml.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_objdetect.a\
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_calib3d.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_video.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_features2d.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_highgui.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_androidcamera.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_flann.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_imgproc.a \
C:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a\libopencv_core.a \
C:\programs\opencvandroidsdk\sdk\native\3rdparty\libs\armeabi-v7a\liblibjpeg.a \
C:\programs\opencvandroidsdk\sdk\native\3rdparty\libs\armeabi-v7a\liblibpng.a \
C:\programs\opencvandroidsdk\sdk\native\3rdparty\libs\armeabi-v7a\liblibtiff.a \
C:\programs\opencvandroidsdk\sdk\native\3rdparty\libs\armeabi-v7a\liblibjasper.a \
C:\programs\opencvandroidsdk\sdk\native\3rdparty\libs\armeabi-v7a\libtbb.a \

到:

LIBS += -LC:\programs\opencvandroidsdk\sdk\native\libs\armeabi-v7a \  
-lopencv_legacy \  
-lopencv_ml \  
-lopencv_objdetect\  
... \  
-ltbb

关于android - QT Widget 使用 OpenCV 错误部署到 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326313/

相关文章:

java - 返回新对象或设置传递对象的变量

php - 安卓mysql php问题

c++ - 尝试使用在 cpp 文件的头文件中声明的私有(private)类时遇到问题

python - 如何将标签置于 QWizardPage 的中心?

c++ - 如果初始化失败如何终止qt编程?

android - ArrayAdapter<String> 中的 getPosition(item) 给出 NullPointerException

c++ - 初始化指针数据结构的空间复杂度

c++ - 用opencv读取16位tif

qt - 在 Win32 VC++ 上使用其他 GUI(如 Qt 或 WxWidgets)的 OpenCV

java - 将网页加载到 Android 应用程序中