OpenCV架构x86_64的未定义符号:lineDescriptor

时间:2017-06-15 17:43:32

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

我也从源代码构建了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对应的旗帜。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

来自README on opencv_contrib's GitHub

  要运行

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

因此,您只需将contrib模块line_descriptor与标记

链接即可
-lopencv_line_descriptor

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