1

我正在尝试将 OpenCV 库的静态库链接到我的项目中,但出现错误:

Undefined symbols for architecture armv7:
  "__ZN2cv9ExceptionC1EiRKSsS2_S2_i", referenced from:
      __ZL16icvGenerateQuadsPP8CvCBQuadPP10CvCBCornerP12CvMemStorageP5CvMati in libopencv_calib3d.a(calibinit.o)
      _cvFindChessboardCorners in libopencv_calib3d.a(calibinit.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不知道那个符号“ZN2cv9ExceptionC1EiRKSsS2_S2_i”应该是什么,在我用来构建静态库的任何源文件或头文件中找到的字母字符串。

任何对链接器更有经验的人可以向我解释这些错误吗?

编辑:01.07。还没有解决这个问题,只是选择不使用 calib3d 进行棋盘检测,并使用 features2D 进行不太复杂的圆形检测,不会出现链接错误。

4

2 回答 2

1

很可能您将 OpenCV 库的顺序错误。在您的链接列表中尝试以下顺序:

opencv_contrib opencv_legacy opencv_videostab opencv_photo opencv_stitching opencv_objdetect opencv_video opencv_ml opencv_calib3d opencv_features2d opencv_highgui opencv_flann opencv_imgproc opencv_core

于 2012-06-27T18:19:56.430 回答
0

您可以使用c++filtunmangle 未定义的符号来查找实际的函数名称。

$ c++filt.exe __ZN2cv9ExceptionC1EiRKSsS2_S2_i
cv::Exception::Exception(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)

然后,您必须确定哪个源文件包含该函数并在库中与该函数相对应的链接。

于 2012-06-27T18:26:59.123 回答