2012-03-16 5 views
1

OpenCV 2.3.1의 사전 빌드 라이브러리를 사용하여 안드로이드에 대한 원시 코드에서 cv::imdecode()을 호출하는 문제로 몇 시간을 벌써 고민하고 있습니다.Android에서 OpenCV - imdecode 링키지 오류

다음은 내가하려는 일입니다. 현재 정적 라이브러리로 빌드 된 BarcodesLibrary 이미지의 QR 코드를 감지하는 라이브러리가 있습니다. 그리고 나서 Java/C++ 객체 간의 변환을 보장하는 JNI 용 래퍼를 작성했습니다.이 모듈은 공유 라이브러리 JNI_QRBarcodesLibrary에 패키징되고 BarcodesLibrary도 링크되어 있습니다.

이제이 덤프에 표시된 오류가 발생합니다. 오류는 highgui 모듈을 삽입하고 imdecode()을 호출하는 것과 관련됩니다. 그냥 모든 것을 잘 컴파일하고 라이브러리가 성공적으로 안드로이드에 imdecode()없이 가져올 수있다 언급해야합니다.

"Compile++ thumb : JNI_QRBarcodesLibrary <= JNI_QRBarcodesLibrary.cpp 
"Compile++ thumb : JNI_QRBarcodesLibrary <= jDetectedMark.cpp 
"Compile++ thumb : JNI_QRBarcodesLibrary <= jImage.cpp 
"Compile++ thumb : JNI_QRBarcodesLibrary <= JNIWrapper.cpp 
"Compile++ thumb : JNI_QRBarcodesLibrary <= jPoint.cpp 
"Compile++ thumb : JNI_QRBarcodesLibrary <= jSize.cpp 
"Compile++ thumb : BarcodesLibrary <= Image.cpp 
"Compile++ thumb : BarcodesLibrary <= Barcode.cpp 
"Compile++ thumb : BarcodesLibrary <= QrBarcode.cpp 
Prebuilt  : libopencv_contrib.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_calib3d.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_objdetect.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_features2d.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_video.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_imgproc.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_highgui.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_ml.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_legacy.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_flann.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libopencv_core.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : lib3rdparty_libjpeg.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : lib3rdparty_libpng.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : lib3rdparty_libtiff.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : lib3rdparty_libjasper.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : lib3rdparty_zlib.a <= ../OpenCV/libs/Android/armeabi/ 
Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi 
StaticLibrary : libBarcodesLibrary.a 
SharedLibrary : libJNI_QRBarcodesLibrary.so 

그리고 빌드이 오류로 종료 :

나는이 라이브러리는 OS에 의존 imshow, waitKey 등을 제공하는 반면이 라이브러리 내부의 모든 기능이 지원 될 것으로 기대하고 있었다
./obj/local/armeabi/libopencv_highgui.a(grfmt_pxm.o):(.data.rel.ro+0x0): undefined reference to `vtable for __cxxabiv1::__enum_type_info' 
./obj/local/armeabi/libopencv_highgui.a(bitstrm.o):(.data.rel.ro+0x0): undefined reference to `vtable for __cxxabiv1::__enum_type_info' 
collect2: ld returned 1 exit status 
make: *** [obj/local/armeabi/libJNI_QRBarcodesLibrary.so] Error 1 

잘하지만 그것과 함께 문제가 될 imdecode 내가 계산에 포함되지 않은 것입니다.

이 문제를 해결하는 방법이나 안드로이드로 포팅하여 이미지 디코딩을 제공 할 수있는 다른 라이브러리, 특히 JPEG 형식을 제공하는 아이디어가 있습니까?

팁에 감사드립니다. 감사.

+0

참고로, [JavaCV] (http://code.google.com/p/javacv/)를 사용해보십시오. NDK없이 사용할 수 있습니다 ... –

답변

1

프로젝트에 OpenCV를 추가하기 위해 OpenCV 배포본의 OpenCV.mk을 사용하십시오. 모든 종속성을 해결합니다.

SourceForge에서 OpenCV 사전 빌드 된 바이너리를 사용하는 경우 share/OpenCV 하위 폴더에서이 파일을 찾을 수 있습니다. 해당 폴더에서 직접 OpenCV.mk을 포함시켜야합니다.

+0

나는 이미 그것을 사용하고 있습니다. 이 파일 안에는 몇 가지 변경 사항이 있습니다. 내가 모든 도서관을 연결했으면 좋겠다. 하지만 도움이되는지 여부에 상관없이이 메이크 파일을 사용하지 않도록 노력할 것입니다. – ITman

+0

여전히 여기에 같은 오류가 있습니다. libBarcodesLibrary가 아닌 libJNI_QRBarcodesLibrary 공유 라이브러리를 빌드하는 동안 왜이 오류가 발생했는지 궁금합니다. 왜냐하면 나는 이미 imdecode를 사용하고 결국 거기에서 imread하기 때문에 ... – ITman

+0

imread는 존재하지 않습니다. OpenCV 라이브러리를 libJNI_QRBarcodesLibrary 링크 라이브러리에 전달해야합니다. –