【发布时间】: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 compiler、verified linker flags 和 linked 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 及更高版本开始,模块分为opencv和opencv_contrib和line_detector是 fromopencv_contrib。您是否验证了line_descriptor.hpp文件是否存在于您的库路径中? -
对你所有的问题都是肯定的。即使从 Xcode 我也能找到头文件并查看类定义。
-
我认为它不会影响它,但您是否尝试过
<>包含而不是""包含(即#include <opencv2/line_descriptor.hpp>)?编辑:根据README onopencv_contrib's GitHub,您需要包含每个特定模块的链接器标志,例如-lopencv_line_descriptor。 -
伙计!!!!非常感谢你!!!!请添加这个作为答案,这样我就可以得到 1K REP .. 对不起,上限 :)
-
没问题,想先看看它是否解决了您的问题,然后再将其添加为答案。我现在做了。现在我在 2^10,这要凉爽得多。
标签: c++ xcode opencv linker linker-errors