2010-10-04 72 views
3

我正在使用android-opencv(android-opencv-http://code.google.com/p/android-opencv/-),它的構建成功並像魅力一樣工作。 然後我嘗試使用「cvCanny」來檢測臉部,但鏈接器報告了一個錯誤「未定義的參考」。android-opencv cvCanny鏈接錯誤

我試了很多東西來解決這個問題,但解決不了。

/home1/apps/c/opencv-android/opencv/obj/local/armeabi-v7a/libobjdetect.a(haar.o): 在功能cvHaarDetectObjects': /home1/apps/c/opencv-android/opencv/modules/objdetect/src/haar.cpp:1127: undefined reference to cvCanny」 collect2:LD返回1個退出狀態

編譯命令

/home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -nostdlib - Wl,-soname,libandroid-opencv.so -Wl,-shared,-Bsymbolic/home1/apps/c/opencv-android /opencv/android/obj/local/armeabi-v7a/objs/android-opencv/yuv420sp2rgb.o /home1/apps/c/opencv-android/opencv/android/obj/local/armeabi-v7a/objs/android- opencv/gen/android_cv_wrap.o /home1/apps/c/opencv-android/opencv/android/obj/local/armeabi-v7a/objs/android-opencv/image_pool.o /home1/apps/c/opencv- android/opencv/android/obj/local/armeabi-v7a/objs/android-opencv/gl_code.o /home1/apps/c/opencv-android/opencv/android/obj/local/armeabi-v7a/objs/android -opencv/Calibration.o /home1/apps/c/opencv-android/opencv/android/obj/local/armeabi-v7a/objs/android-opencv/Processor.o /home1/apps/c/opencv-android/opencv/android/obj/local/armeabi-v7a/objs/android-opencv/gen/cvcamera_swig.o -Wl, - whole-archive -Wl, - no-whole-archive/home1/android-ndk-crystax /build/platforms/android-5/arch-arm/usr/lib/libmissing.a /home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../。 ./../arm-eabi/lib/libstdc++.a /home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm -eabi/4.4.0 /../../../../ arm-eabi/lib/libsupC++。a /home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi- 4.4.0/bin /../ lib/gcc/arm-eabi/4.4.0/libgcc.a /home1/android-ndk-crystax/build/platforms/android-5/arch-arm/usr/lib/libc.so /home1/android-ndk-crystax/build/platforms/android-5/arch-arm/usr/lib/libm.so -W1, - fix-cortex-a8 -W1, - no- undefined -Wl,-z,noexecstack -L/home1/android-ndk-crystax/build/platforms/android-5/arch-arm/usr/lib -L/home1/apps/c/opencv-android/opencv/bin/ndk/local/armeabi-v7a -L/home1/apps/c/opencv -android/opencv/obj/local/armeabi-v7a -Wl,-rpath-link =/home1/apps/c/opencv-android/opencv/obj/local/armeabi-v7a -lfeatures2d -lcalib3d -limgproc -lvideo -lhighgui -lml -llegacy -lcore -lopencv_lapack -lflann -lobjdetect -lzlib -lpng -ljpeg -ljasper -llog -lGLESv2 -Wl,-rpath-link =/home1/android-ndk-crystax/build/platforms/android-5/arch-arm/usr/lib /home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0 /../../../../arm-eabi/lib/libstdc++.a /home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/ ../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/lib/libsupc++.a /home1/android-ndk-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin /../ lib/gcc/arm-eabi/4.4.0/libgcc.a -o/home1/apps/c/opencv-android/opencv/android/OBJ /本地/ armeabi-V7A/libandroid開cv.so

當我用「nm」命令檢查「libimgproc.a」時,它說它具有「cvCanny」符號,但鏈接器抱怨...

納米 /home1/apps/c/opencv-android/opencv/obj/local/armeabi-v7a/libimgproc.a | grep的cvCanny

00000000 [R ZZ7cvCannyE19 _PRETTY_FUNCTION__

00000001牛逼cvCanny

請給我一個關於這個問題,喜歡暗示...?

回答

1

在android-opencv項目站點上發現了一個解決方案,它涉及到更改opencv庫的加載順序。

http://code.google.com/p/android-opencv/issues/detail?id=17

+0

在android-opencv項目網站上發現了一個解決方案,它涉及到更改opencv庫的加載順序。 http://code.google.com/p/android-opencv/issues/detail?id=17 – iamiend 2011-01-12 23:13:43

+0

該鏈接已損壞。 – 2013-12-05 20:44:24

1

當使用gcc(或g ++)具有依賴性,爲了事項鍊接靜態庫。

由於objdetect取決於imgproc,它必須首先:

libopencv_core.a libopencv_highgui.a libopencv_objdetect.a libopencv_imgproc.a 

這是因爲GNU連接解決依賴於給定參數的順序,丟棄那些未引用到這一點在移動之前的任何符號。

找到重新排序庫是否能夠解決您的問題的一種方法是重複所有庫,以便在所有其他庫(再次)之後向鏈接器提供每個庫列表。如果這解決了你的鏈接錯誤,那麼你有一個靜態庫訂購問題。