踩过的那些坑及坑的填法

  • 写在前面
  • MinGw的下载、解压和确认
  • CMake的下载、解压和确认
  • Opencv的下载、解压和确认
  • 编译
  • VScode配置
  • 运行测试文件


写在前面

新手,第一次在vscode上搭建环境。感谢VScode搭建Opencv(C++开发环境)__河旬的博客 **提供的方法。这是一版过程清晰的教程。但是,对于我这新手来说,实际装的过程中,因为对细节的不熟悉,没能一次成功。折腾了好几天,终于把过程中不断出现的新问题一一解决了。做个记录,当作给同样是新手的人一个补充。

MinGw的下载、解压和确认

  • 看清版本,posix是64位的,win32是32位的。理论上,64位也能装32位;实际上,有可能导致部分文件编译不成功。我第一次是因为下载得慢,换win32试了一下。后来,安装过程有报错,后续编译也有很多问题。最后,删掉重装,还是老老实实等下载。
  • 解压后,文件夹层级多,可以改在后续操作前调整一下,不影响。
  • 确认时,输入“gcc -v”如果出现不是内部指令的提示。请检查一下环境变量设置是否正确。
  • 环境变量应编辑Path变量,通过新建环境变量值完成,路径以\结束。例如D:\MinGw\bin\。
  • 调出cmd的方法,大部分默认快捷键是win+R。
  • 如果环境变量未设置成功,通过cd 命令,转到gcc文件的目录,也能确认成功,但后续会出错。

CMake的下载、解压和确认

难度不大,照着教程完成就可以了。同样注意环境变量的的正确设置。

Opencv的下载、解压和确认

  • Opencv软件的版本,推荐使用教程中的4.5.2。一开始下载了最新的4.6.0,编译过程中出现无法处理call_once、once_flag等问题。找了很多教程,都没有非常清晰的说明或处理指导,或者说有人已经遇到过完全相同的问题。最后考虑版本比较新,就换回4.5.2版本,同样的问题没再出现。
  • Opencv的解压。下载的是exe文件,双击后实际完成的是一个解压的过程。解压后,生成opencv的文件夹。建议,为了让文件路径简单,解压路径设置在盘的根目录下,如D:\。
  • 解压后,请勿移动所解压的文件。后续用CMake编译的过程中,卡总是找不到*.dll文件的情况,但是,反复确认目录中是有个这文件的。推测可能是其中某个路径设定的原因。没有找到解决这个问题的指路教程。在重复过多次前述过程后,确定试一试解压路径问题。最终,在保留opencv的exe文件原地解压结果,不进行任何复制、粘贴等更改路径的操作后,CMake配置顺利开启!

编译

  • cmake配置时,会有一些与python有关的报错信息,其中与python有关的,或是CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install 等报错信息,可忽略。
  • 需要处理的报错信息是两个dll文件和一个cmake文件没有下载成功。打开CMakeDownloadLog.txt,找到各文件的下载地址,通过这个网站:https://ghproxy.com 加速下载。
  • 下载后的文件要放在opencv\sources.cache后的各子文件夹中,名字一定要改成原始的文件名。
  • 完美的make和install的过程,不会出现任何的错误情况,最终会在“opencv/build/x64/mingw/”目录下生成install文件夹。如果有error提示或者没有生成install文件夹,说明安装不成功,原因还是在前面有哪个环节没做好。
  • 曾经遇到过install时,没有磁盘写入权限的情况。百度后推测是cmd需要用管理员权限打开。打开权限确实也能运行,但是,还是没能生成install文件夹。后续的操作也就都是百搭。
  • 再次提醒,环境变量一定要设置对。

VScode配置

  • 遇到的第一个问题。launch\c_cpp_properties\tasks三个json文件,该放在哪儿?教程没有说明。
  • 看了其他教程知道,要建一个.vscode的文件夹,将以上三个文件放到.vscode里的。
  • 建好文件夹,并创建好json文件。

运行测试文件

  • 参照示例,创建测试用的cpp文件。
  • 运行后,仍出现报错信息,找不到opencv.hpp。
  • 根据vscode的提示,尝试检查并修改c_cpp_properties里的设置。修改好的c_cpp_properties.json文件被自动保存在了另一个过程创建的.vscode文件夹中。
  • 把另外2个文件复制粘贴到新的.vscode文件夹中,再次运行测试文件。
  • 其他都顺利,但是,再次出现了preLaunchTask“g++“已终止,退出代码为1这样的信息,导致无法编译成功。
  • 结合原因分析1和解决方案2,逐一检查、调整、尝试。
    -最终测试成功!