DevC++编译及使用Opencv

1.依赖

需要如下依赖:

  • DevC++11
  • Opencv4.10.0
  • CMake.exe

整个安装过程参考下面的文章:https://blog.csdn.net/weixin_41673576/article/details/108519841

这里总结一下遇到的问题。

2.问题

2.1 DevC++安装路径

一定不要有空格!!否则CMake工具识别GCC工具链路径会有问题!

2.2 安装Anaconda3

首先安装Anaconda3,CMake时会使用python进行构建。
(注意这个不一定,因为之前是用有问题的gcc编译的,后来没再尝试了!)

2.3 CMake选项如何选择

  • 去掉BUILD_PROTOBUF和WITH_PROTOBUF选项,否则编译可能报错。
  • 去掉BUILD_OPENJPEG。
  • 如果不想做Intel下的WITH_IPP加速,去掉该选项,否则需要安装相关库。
  • 搜索TEST关键字,去掉所有相关选项,加快编译速度。
  • 去掉Build_opencv_gapi选项,我们采用的devc++依赖的GCC版本貌似不支持gapi中某些C++11特性,这里也不准备测试gapi了。
  • 去掉Build_opencv_pythonxx的相关项,不做python绑定,否则需要修改Anaconda3的某些设置。
  • 去掉BUILD_opencv_java_xx、BUILD_opencv_js_xx绑定。
  • CMAKE_BUILD_TYPE默认是Release,如果想调试Opencv源码,需修改为Debug,此时编译时会添加-g选项。
  • 【重要】检查下面的编译器选项,如下是错误的配置:

    这个是由于环境变量中,Dev-Cpp的位置在C:/Strawberry下面导致的,应该修改为DevCpp在嘴上面,然后删除Cache,重新加载:
  • 其他。

2.4 CMake工具拉取ffpeg失败

在CMake的Configure时,可能会遇到该问题,(修改gcc编译器后此问题未复现),打开CmakeDownLoadLog.txt,发现缺少三个文件,按照地址去下载下来,放到文件中说明的指定位置即可:

2.5 DevCpp环境检查

由于编译最后一步使用DevCpp下的mingw32-make指令,首先要确保执行指令时,执行的是DevCpp下的。

cmd中执行如下指令,确保mingw32-makeldgcc等第一顺位排的是DevCpp目录下的:

bash 复制代码
where mingw32-make
where ld
where gcc

如果不在第一顺位,那么环境变量有问题。

环境变量修改后,记得使用mingw32-make clean清理一下,否则可能继续会报错。

注意bin和lib目录不要删,里面内容可以删!

3 DevCpp运行Opencv

配置好库、lib、头文件后,就可以调试代码了,注意右键项目,可在【项目属性】中配置exe的输出路径,我们要把exe放到opencv dll目录下才能调试。

代码如下:

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
 
using namespace cv;

int main(int argc, char** argv) {
	// 创建一个名为 "游戏原画"窗口
    namedWindow("这是第一个测试窗口");
 
    // 等待6000 ms后窗口自动关闭
    waitKey(6000);

	return 0;
}

打断点后,可断下来:

并可以调到Opencv的源码中进行调试:

注意,修改代码后,一定记得重新编译程序!

4 总结

这个DevCpp真的难用的要死,代码提示、代码补全、定义跳转等等无比难用,还是选择vscode+mingw吧!

相关推荐
方传旺9 分钟前
C++17 std::optional 深拷贝 vs 引用:unordered_map 查询大对象性能对比
c++
Dontla25 分钟前
Makefile介绍(Makefile教程)(C/C++编译构建、自动化构建工具)
c语言·c++·自动化
何妨重温wdys1 小时前
矩阵链相乘的最少乘法次数(动态规划解法)
c++·算法·矩阵·动态规划
重启的码农1 小时前
ggml 介绍 (6) 后端 (ggml_backend)
c++·人工智能·神经网络
重启的码农1 小时前
ggml介绍 (7)后端缓冲区 (ggml_backend_buffer)
c++·人工智能·神经网络
雨落倾城夏未凉1 小时前
5.通过拷贝构造函数复制一个对象,假如对象的成员中有个指针类型的变量,如何避免拷贝出来的副本中的该成员之下行同一块内存(等价于默认拷贝构造函数有没有缺点)
c++·后端
雨落倾城夏未凉1 小时前
4.深拷贝VS浅拷贝
c++·后端
tanyongxi662 小时前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式
fqbqrr2 小时前
2508C++,支持rdma通信的高性能rpc库
c++·rpc
liulilittle3 小时前
BFS寻路算法解析与实现
开发语言·c++·算法·宽度优先·寻路算法·寻路