Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接OpenCV时未定义的符号_C++_Ios_Opencv_Linker - Fatal编程技术网

C++ 链接OpenCV时未定义的符号

C++ 链接OpenCV时未定义的符号,c++,ios,opencv,linker,C++,Ios,Opencv,Linker,我正在尝试将OpenCV库的静态库链接到我的项目中,但出现错误: Undefined symbols for architecture armv7: "__ZN2cv9ExceptionC1EiRKSsS2_S2_i", referenced from: __ZL16icvGenerateQuadsPP8CvCBQuadPP10CvCBCornerP12CvMemStorageP5CvMati in libopencv_calib3d.a(calibinit.o) _

我正在尝试将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)
我不知道符号“ZN2CV9Exception1Eirksss2_S2_I”应该是什么,也不知道我用来构建静态库的任何源文件或头文件中的字母字符串

有谁对链接器更有经验,能向我解释一下这些错误吗


编辑:01.07。还没有解决这个问题,只是选择使用calib3d退出棋盘格检测,并使用不会产生链接错误的功能2d进行不太复杂的圆检测。

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

opencv_contrib opencv_legacy opencv_videostab opencv_photo opencv_缝合opencv_objdetect opencv_video opencv_ml opencv_calib3d opencv_功能2d opencv_highgui opencv_Flan opencv_imgproc opencv_core


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

opencv_contrib opencv_legacy opencv_videostab opencv_photo opencv_缝合opencv_objdetect opencv_video opencv_ml opencv_calib3d opencv_功能2d opencv_highgui opencv_Flan opencv_imgproc opencv_core


您可以使用
c++filt
对未定义的符号进行分解,以找到实际的函数名

$ 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)
$c++filt.exe\uuu zn2cv9异常1IRKSSS2\uS2\uI
cv::Exception::Exception(int,std::basic_string const&,std::basic_string const&,std::basic_string const&,int)

然后,您必须确定哪个源文件包含此函数,以及库中与之对应的链接。

您可以使用
c++filt
对未定义的符号进行分解,以找到实际的函数名

$ 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)
$c++filt.exe\uuu zn2cv9异常1IRKSSS2\uS2\uI
cv::Exception::Exception(int,std::basic_string const&,std::basic_string const&,std::basic_string const&,int)

然后,您必须确定哪个源文件包含此函数以及库中与之对应的链接。

尝试在项目构建阶段列表中重新排序,但以下两个顺序均无效:“[…]-framework CrashReporter-framework GameKit-lopencv_contrib-lopencv_legacy-lopencv_objdetect-lopencv_video-lopencv_ml-lopencv_calib3d-lopencv_特色2d-lopencv_highgui-lopencv_flann-lopencv imgproc-lopencv_core-o[…]和“…]-framework GameKit-lopencv_core-lopencv_imgproc-lopencv_flann-lopencv_highgui-lopencv_features2d-lopencv_calib3d-lopencv_ml-lopencv_视频-lopencv_objdetect-lopencv_legacy-lopencv_contrib-o[……]“尝试在项目构建阶段列表中重新排序,以下两个顺序均无效:“[……]-framework CrashReporter-framework GameKit-lopencv_contrib-lopencv_legacy-lopencv_objdetect-lopencv_video-lopencv_ml-lopencv_calib3d-lopencv_特色2d-lopencv_highgui-lopencv_flann-lopencv imgproc-lopencv_core-o[…]和“…]-框架游戏套件-lopencv_core-lopencv_imgproc-lopencv_flann-lopencv_highgui-lopencv_功能2d-lopencv_calib3d-lopencv_ml-lopencv_视频-lopencv_对象检测-lopencv_遗产-lopencv_贡献-o[…]”不幸的是,在如此混乱的符号中,我看不到任何特定的函数名…包含缺少函数的库是
libopencv\u core.a
。这是我链接的第一个库。。现在我放弃了使用legacy/calib3d,而是使用一种圆检测方法,使用feature2d.a。(功能2s、imgproc、objdetect和core lnk)不幸的是,在如此混乱的符号中,我看不到任何特定的函数名……包含缺少函数的库是
libopencv\u core.a
。这是我链接的第一个库。。现在我放弃了使用legacy/calib3d,而是使用一种圆检测方法,使用feature2d.a。(功能2S、imgproc、objdetect和核心lnk)