【问题标题】:OpenCV Undefined symbols for architecture x86_64: lineDescriptor架构 x86_64 的 OpenCV 未定义符号:lineDescriptor
【发布时间】:2017-06-15 17:43:32
【问题描述】:

我也从源代码构建了 OpenCV 以及 opencv_contrib

由于某种原因,我所有尝试访问 lineDescriptor 中的类都会导致链接器错误。

所有这些声明都会引发链接器错误

BinaryDescriptor bsd = BinaryDescriptor();
Ptr<BinaryDescriptor> bsd1 = BinaryDescriptor::createBinaryDescriptor();
Ptr<LSDDetector> lsd1 = LSDDetector::createLSDDetector();

我完全理解错误的含义,但我不知道为什么会首先抛出它。

我环顾四周并尝试了不同的解决方案; changing the compilerverified linker flagslinked my libraries,但仍然抛出错误。

#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/line_descriptor.hpp"

using namespace cv;
using namespace std;
using namespace line_descriptor;

void detectLines(Mat& original, Mat grey)
{
    Ptr<LineSegmentDetector> lsd = createLineSegmentDetector(2);

    vector<Vec4f> lines;

    lsd->detect(grey, lines);

    cout << "Detected " << lines.size() << endl;

    lsd->drawSegments(original, lines);

    // Linker problems galore
//  BinaryDescriptor bsd = BinaryDescriptor();
//  Ptr<BinaryDescriptor> bsd1 = BinaryDescriptor::createBinaryDescriptor();
//  Ptr<LSDDetector> lsd1 = LSDDetector::createLSDDetector();

}

这些是我当前的链接器标志

-lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab

我个人觉得这与我的标志有关,但我不确定与lineDescriptor 对应的标志。任何帮助将不胜感激!

【问题讨论】:

  • 您是使用opencv_contrib 构建的吗?从 OpenCV 3.0 及更高版本开始,模块分为 opencvopencv_contribline_detectorfrom opencv_contrib。您是否验证了 line_descriptor.hpp 文件是否存在于您的库路径中?
  • 对你所有的问题都是肯定的。即使从 Xcode 我也能找到头文件并查看类定义。
  • 我认为它不会影响它,但您是否尝试过 &lt;&gt; 包含而不是 "" 包含(即 #include &lt;opencv2/line_descriptor.hpp&gt;)?编辑:根据README on opencv_contrib's GitHub,您需要包含每个特定模块的链接器标志,例如-lopencv_line_descriptor
  • 伙计!!!!非常感谢你!!!!请添加这个作为答案,这样我就可以得到 1K REP .. 对不起,上限 :)
  • 没问题,想先看看它是否解决了您的问题,然后再将其添加为答案。我现在做了。现在我在 2^10,这要凉爽得多。

标签: c++ xcode opencv linker linker-errors


【解决方案1】:

来自README on opencv_contrib's GitHub

要运行,需要添加到 contrib 模块的链接器标志才能在您的代码/IDE 中使用它们。例如要使用 aruco 模块,将添加“-lopencv_aruco”标志。

所以你需要简单地将contrib 模块line_descriptor 与标志链接

-lopencv_line_descriptor

这是一个thorough answer on SO,它会在安装步骤中一次性链接所有库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-08-07
    • 2012-07-20
    • 1970-01-01
    • 2015-08-23
    • 2014-05-27
    • 2017-07-06
    相关资源
    最近更新 更多