2010-10-04 76 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连接解决依赖于给定参数的顺序,丢弃那些未引用到这一点在移动之前的任何符号。

找到重新排序库是否能够解决您的问题的一种方法是重复所有库,以便在所有其他库(再次)之后向链接器提供每个库列表。如果这解决了你的链接错误,那么你有一个静态库订购问题。