2014-12-05 7 views
0

QT 위젯 (C++)을 만들고 OpenCV 라이브러리 (C++)를 사용하여 Android에 배포하고 싶습니다.Android에 배포하는 OpenCV 오류를 사용하는 QT 위젯

Android 용 QT와 NDK, SDK 등 http://qt-project.org/doc/qt-5/androidgs.html (NDK, SDK 등)에 언급 된 필요한 파일을 설치했습니다. Android 용 QT에 mingw 컴파일러가 포함되어 있으므로 설치하지 않아도됩니다.

QT 위젯을 Android에 배포해도 아무런 문제가 없습니다. 문제는 QT 위젯에서 OpenCV 라이브러리를 사용한 다음 배포하는 것입니다.

나는 나의 QT 프로젝트에서 OpenCV의를 사용하는 두 가지 옵션을 시도했다 : 안드로이드 QT으로

  1. 을 내가 CMake와와 Mingw 컴파일러를 사용하여 소스에서 OpenCV의 라이브러리를 컴파일 한와 Mingw 컴파일러와 함께 제공됩니다. 그런 다음 헤더 파일을 포함하고 라이브러리를 QT의 프로젝트 파일에 연결했습니다. 이 옵션은 작동하지 않습니다. 필자는이 포함 방법에 익숙하며 Boost와 Eigen과 같은 다른 라이브러리를 같은 방식으로 사용하고자합니다.

  2. OPENCV android SDK를 다운로드하고 헤더 파일을 포함하고 라이브러리를 QT의 프로젝트 파일에 연결했습니다. 이것은 여전히 ​​효과가 없습니다.

기본적으로 내가하고 싶은 것은 C++의 코드이므로, 위젯을 사용하고 qtquick (qml)을 사용하지 마십시오. 위의 단계 중 어느 것이 맞는지, 그리고 내가해야하는 변경 사항을 알려주십시오.

또 다른 메모에서 누군가 내가 에뮬레이터의 속도를 높일 수있는 방법을 알고 있습니다. AMD 프로세서를 가지고 있으므로 인텔 도구를 사용할 수 없습니다. 그리고 삼성 노트 4의 AVD 설정은 어디에서 얻을 수 있습니까?

대단히 감사합니다 !! 옵션 1

프로젝트 파일 : 옵션 2

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. 

프로젝트 파일 : 옵션 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 = 

오류 옵션 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 = 

오류 :

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의
+0

없음 "무엇을 작동하지 않습니다"에 대한 자세한 내용은 없으며, 코드; 도움이 불가능합니다. – lpapp

+0

@lpapp 코드를 붙여 넣었습니다. 감사! – West1234

+0

Glob은 다음과 같이 작동하지 않습니다 :'LIBS + = C : \ programs \ opencvandroidsdk \ sdk \ native \ 3rdparty \ libs \ armeabi-v7a *'. 'LIBS + = -LC : \ path \ to \ cv \ library -lopencvlibname'을 지정하십시오. – lpapp

답변

1

:

변경

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 
+0

고마워 이제는 "표현 후 추가 문자"오류가 발생했습니다. 내 질문을 업데이트하여 오류를 표시했습니다. – West1234

+0

죄송합니다. , 그것은 내 잘못이야. -LC : \ programs \ opencvandroidsdk \ sdk \ native \ libs \ armeabi-v7a \ libopencv_contrib.a에서 libopencv_contrib.a를 제거하십시오. 그래서 -L은 lib 디렉토리를위한 것이고 -l은 라이브러리 파일을위한 것입니다. libBlaBla.a를 추가하려면 -lBlaBla (lib 및 .a없이) –

+0

에 너무 감사드립니다 !! 그것은 일했다, 전설! – West1234