我使用的是安卓-opencv(安卓-opencv -- http://code.google.com/p/android-opencv/ -),它是成功建造的,运行起来很有魅力。然后,我尝试使用"cvCanny“来检测面孔,但是链接器报告了一个”未定义引用“错误。
我试了很多东西来解决这个问题,但没能解决。
/home1/apps/c/opencv-android/opencv/obj/local/armeabi-v7a/libobjdetect.a(haar.o):In
cvHaarDetectObjects': /home1/apps/c/opencv-android/opencv/modules/objdetect/src/haar.cpp:1127: undefined reference tocvCanny‘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,/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/opencvandroid/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-整体-存档-Wl,-无完整存档的/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/usr/lib/libc.so /home1/android-ndk-crystax/build/platforms/android-5/arch-arm/usr/lib/libm.so -Wl,-修复-皮质-A8 -Wl,-未定义的-Wl,-z,noexecstack -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 -llog-lpng,-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/local/armeabi-v7a/libandroid-opencv.so
当我检查带有"nm“命令的”libimgpro.a“时,它说它有"cvCanny”的符号,但是链接器抱怨.
/home1/apps/c/opencv-android/opencv/obj/local/armeabi-v7a/libimgproc.a
cvCanny
00000000 r ZZ7cvCannyE19_PRETTY_FUNCTION__
00000001 T cvCanny
请给我提示一下这个喜欢的问题.?
发布于 2013-12-05 20:49:53
当使用gcc (或g++)将静态库与依赖项链接时,顺序很重要。
由于objdetect依赖于imgproc,所以它必须是第一个:
libopencv_core.a libopencv_highgui.a libopencv_objdetect.a libopencv_imgproc.a这是因为GNU链接器按照给定参数的顺序解析依赖项,在继续之前丢弃所有未引用到该点的符号。
找到重新排序库是否能解决您的问题的一种方法是重复所有库,以便在所有其他库之后提供给链接器的每个库列表(再次)。如果这解决了您的链接错误,那么您将遇到一个静态库排序问题。
发布于 2010-10-14 23:19:30
在android项目站点上找到了一个解决方案,该解决方案涉及更改opencv库加载的顺序。
http://code.google.com/p/android-opencv/issues/detail?id=17
https://stackoverflow.com/questions/3854982
复制相似问题