【问题标题】:Undefinded symbols when linking OpenCV链接 OpenCV 时未定义的符号
【发布时间】:2012-06-27 17:38:58
【问题描述】:

我正在尝试将 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 进行不太复杂的圆形检测,不会出现链接错误。

【问题讨论】:

    标签: c++ ios opencv linker


    【解决方案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

    【讨论】:

    • 尝试在项目构建阶段列表中重新排序,以下两个命令均无效:“[..]-framework CrashReporter -framework GameKit -lopencv_contrib -lopencv_legacy -lopencv_objdetect -lopencv_video -lopencv_ml -lopencv_calib3d -lopencv_features2d -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_video -lopencv_objdetect -lopencv_legacy -lopencv_contribo - .]"
    【解决方案2】:

    您可以使用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)
    

    然后你必须确定哪个源文件包含这个函数并在对应的库中链接。

    【讨论】:

    • 不幸的是,我在如此未损坏的符号中看不到特定的函数名称...
    • 包含缺失函数的库是libopencv_core.a。
    • 这是我链接的第一个库.. 现在我放弃了使用 legacy/calib3d 并使用圆形检测方式,使用 features2d.a。 (features2s、imgproc、objdetect 和 core lnk 都很好)
    猜你喜欢
    • 2013-10-01
    • 2013-04-11
    • 1970-01-01
    • 2018-04-24
    • 2010-09-17
    • 1970-01-01
    • 2022-01-04
    • 2012-10-03
    相关资源
    最近更新 更多