【问题标题】:"undefined reference" and includes not found when using OpenCV in C++“未定义的引用”,包括在 C++ 中使用 OpenCV 时未找到
【发布时间】:2021-11-12 08:52:19
【问题描述】:

我是 C++ 新手,我需要一些库方面的帮助

就是这样,

这个简单的代码:

#include <opencv2/objdetect.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <iostream>

int main() {
  cv::CascadeClassifier eye_detection;
  return 1;
}

编译

g++ main.cpp -I/usr/include/opencv4

还给我

/usr/bin/ld: /tmp/ccOsUApG.o: na função "main":
main.cpp:(.text+0x20): referência não definida para "cv::CascadeClassifier::CascadeClassifier()"
/usr/bin/ld: main.cpp:(.text+0x31): referência não definida para "cv::CascadeClassifier::~CascadeClassifier()"
collect2: error: ld returned 1 exit status

翻译为“未定义的引用”


我也尝试改变我写“包含”的方式

#include <opencv4/opencv2/objdetect.hpp>
#include <opencv4/opencv2/highgui.hpp>
#include <opencv4/opencv2/imgproc.hpp>
#include <opencv4/opencv2/videoio.hpp>
#include <iostream>

int main() {
  cv::CascadeClassifier eye_detection;
  return 1;
}

并编译:

g++ main.cpp

我有:

In file included from main.cpp:1:
/usr/include/opencv4/opencv2/objdetect.hpp:47:10: fatal error: opencv2/core.hpp: Arquivo ou diretório inexistente
   47 | #include "opencv2/core.hpp"
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.

这意味着找不到文件


我检查了其他类似的问题,如this one,但我已经在做,但没有成功

我想过把“opencv2”文件夹直接扔到“include”文件夹中,但是好像不对,如何正确编译这段代码?

【问题讨论】:

  • 您没有将lib 文件正确添加到您的项目配置中
  • 您必须包含标题和库链接。
  • 第一个版本的includes是对的,但是需要链接库。

标签: c++ opencv


【解决方案1】:

最后我想通了,我按照图书馆网站的说法创建了 CMakeList 文件,但仍然无法正常工作,所以我决定从系统的包管理器中卸载我的包并手动安装它下载代码并使用 cmake 编译,它现在确实有效,即使我什么也没做(它可能只是改变了文件夹,我之前无法指出它)

简而言之,cpp 比我想象的要复杂得多,从现在开始更多地检查 make 和 cmakes 文件

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2011-06-05
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多