VSCode配置C++开发环境:OpenCV

news2024/11/26 12:36:31

文章目录

    • Linux
      • 编译
      • 调试
      • 配置OpenCV
    • Win10
      • 编译调试
      • 配置OpenCV
    • 参考

最近在做深度学习的C++部署相关工作,于是写下这篇文档记录环境配置的过程。环境配置是一项非常繁琐的工作,无论从大学做相关作业还是到工作上。做这项工作需要技术的同时,还需要点运气。当然遇到无法解决的玄学问题,最终只有一个办法:重启设备。

本篇文章以环境为设置分为两个环境进行部署,一个是Linux和Win10部署的部分。Linux部分部署时因为无论是端侧部署应用还是服务端部署应用都会涉及到Linux。而Windows部署则是为了方便我在自己笔记本上进行学习练习才记录下来的。那么现在就开始我们的环境配置部署之路。

无论是Linux还是Win10环境,先写一个测试的​hello world代码:

#include<iostream>
using namespace std;
int main(){
    cout<<"hello world"<<endl;
}

Linux

我的Linux版本是:Linux ubuntu 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux。通过Win10设备上的VSCode连接到服务器上的。要配置C++环境,那么要先把vscode上的C++扩展安装好,如下图所示:
在这里插入图片描述
在配置好vscode的环境后,需要在当前项目的.vscode文件夹下配置task.jsonlaunch.jsonc_cpp_properties.json文件,其中task.json用于编译器配置,launch.json用于调试器设置,c_cpp_properties.json用于编译器路径和IntelliSense设置。

编译

新建task.json文件,该文件是告诉vscode如何编译程序,大概用途是使用g++编译器编译源文件为可执行文件。task内容如下:

{
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        "label": "g++ build active file",
        "command": "/usr/bin/g++",
        "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],
        "options": {
          "cwd": "/usr/bin"
        },
        "problemMatcher": ["$gcc"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
}

command 变量指定了那个编译器会被使用,这里就是 /usr/bin 目录下的 g++ 编译器;args 这个参数列表给出了我们需要传递给g++编译器的命令参数,需要符合g++命令行的参数顺序,${file} 代表目前编辑器打开的文件,${fileDirname} 代表当前活跃文件的目录,${fileBasenameNoExtension} 为生成的文件名,与被编译的文件名相同。label 变量的值为终端任务中名字,你可以任意修改;group 变量中的 "isDefault":true 代表了当按下Ctrl+Shift+B时,会对当前活跃的文件进行编译,仅仅是为了方便。关于更多的变量定义可以参考:Variables Reference

VS Code打开tmp.cpp 源文件,并处于编辑界面,按下 Ctrl+Shift+B键 (或者在 主菜单->终端->运行生成任务 ),tasks.json 就会被执行。
在这里插入图片描述
运行该文件,输出hello world
在这里插入图片描述
要注意:要让tmp.cpp(即你要编译的文件)处于活跃状态。

调试

调试文件主要使用launch.json文件,该文件配置VS Code下的GDB调试器。GDB调试器安装命令:apt-get install build-essential gdb
launch.json内容:

{
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ],
    "version": "2.0.0"
}

其中,program变量指定你想要调试的文件,这里被设置为活跃文件夹${fileDirname}下的活跃文件${fileBasenameNoExtension},如果tmp.cpp处于活跃, 那么tmp会被调试。默认情况下,C++ 扩展不会添加断点到源文件中,stopAtEntry默认被设置为flase,如果设置为true的话,那么调试器会在main方法入口暂停。

配置OpenCV

如果你需要更多关于 C/C++ 扩展的使用,你可以创建一个c_cpp_properties.json文件,这个可以让你去改变一些设置,例如编译器的路径、C++ 标准等。你可以在 VS Code 中按下 Ctrl+Shift+P键,并在命令行中输入C/C++,可以在下拉菜单中选择C/C++配置,这样在 .vscode文件夹下出现c_cpp_properties.json文件,同时在 VS Code 界面出现一个设置窗口,你可以按照你的需要在里面修改一些 C/C++ 的配置。

要配置opencv,当然要先安装好OpenCV,可参考该文章:笔记—Linux安装OpenCV及VSCode的配置编译和实践出真知——Ubuntu 18.04 VSCODE配置OpenCV4.5运行YOLO4模型。

新建c_cpp_properties.json文件,内容如下:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/opencv2"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

主要是inclodePath要包含opencv头文件的路径。

修改task.json文件,因为需要加入opencv的动态链接库:

{
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        "label": "g++ build active file",
        "command": "/usr/bin/g++",
        "args": [
          "-g", 
          "${file}", 
          "-o", 
          "${fileDirname}/${fileBasenameNoExtension}",
          "`pkg-config", "--cflags", "--libs", "opencv4`",       
          // "-I", "/usr/local/include",        
          // "-I", "/usr/local/include/opencv4",       
          // "-I", "/usr/local/include/opencv4/opencv2",       
          // "-L", "/usr/local/lib",        
          // "-l", "opencv_core",        
          // "-l", "opencv_imgproc",        
          // "-l", "opencv_imgcodecs",
          // "-l", "opencv_video",        
          // "-l", "opencv_ml",
          // "-l", "opencv_highgui",
          // "-l", "opencv_objdetect",
          // "-l", "opencv_flann",
          // "-l", "opencv_imgcodecs",
          // "-l", "opencv_photo",
          // "-l", "opencv_videoio"
        ],
        "options": {
          "cwd": "/usr/bin"
        },
        "problemMatcher": ["$gcc"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
}

最终像上述的编译调试运行以下程序代码即可:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc,char** argv){

    std::cout<<"111"<< std::endl;
    cv::Mat src = cv::imread("./src/model_optimize.jpg");
    cv::resize(src,src,cv::Size(500,800));
    imwrite("./test.jpg", src);
    return 0;
}

Win10

要在Win10上调试C++程序,那么就要先安装好MinGW并进行配置。在这一步这里就不展开了。

编译调试

编译调试跟Linux原理差不多,将task.json以及launch.json里面的g++gdb路径配置好即可,文件内容如下:

task.json

{
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        "label": "g++ build active file",
        "command": "C:/mingw64/bin/g++.exe",
        "args": [
          "-g", 
          "${file}", 
          "-o", 
          "${fileDirname}/${fileBasenameNoExtension}"    
          // "-I", "/usr/local/include",        
          // "-I", "/usr/local/include/opencv4",       
          // "-I", "/usr/local/include/opencv4/opencv2",       
          // "-L", "/usr/local/lib",        
          // "-l", "opencv_core",        
          // "-l", "opencv_imgproc",        
          // "-l", "opencv_imgcodecs",
          // "-l", "opencv_video",        
          // "-l", "opencv_ml",
          // "-l", "opencv_highgui",
          // "-l", "opencv_objdetect",
          // "-l", "opencv_flann",
          // "-l", "opencv_imgcodecs",
          // "-l", "opencv_photo",
          // "-l", "opencv_videoio"
        ],
        "options": {
          "cwd": "C:/mingw64/bin"
        },
        "problemMatcher": ["$gcc"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
}

launch.json文件如下:

{
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++ build active file",
            "miDebuggerPath": "C:/mingw64/bin/gdb.exe"
        }
    ],
    "version": "2.0.0"
}

配置OpenCV

opencv版本:4.6.10。配置OpenCV的工作原理:对OpenCV的源码进行编译,然后在VSCode上进行配置。

(1)源码编译

编译安装的环境:

  • cmake version 3.9.0-rc3
  • mingw 5.3.0

设置好源码路径已经生成路径,点击configure按钮,注意:选择生成MinGW Makefiules,选择Specify native compilers,最后配置你的编译器路径。

在这里插入图片描述
在这里插入图片描述

点击Generate按钮。
在这里插入图片描述
到设置的路径,这里是:C:\opencv\build\x64\mingw下执行:minGW32-make -j8
在这里插入图片描述

执行minGW32-make install

在这里插入图片描述

最后在bin下生成结果,并将C:\opencv\build\x64\mingw\bin配置到环境路径下。

遇到的问题:

  1. 编译生成报如图下的错,因为OpenCV版本太old了。最终更新至4.6.10。
    在这里插入图片描述

解决方案:OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法

  1. 出现“Unexpected GDB output from command “-exec-run”.”
    在这里插入图片描述
    StackOverFlow上的解决方案:ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run”. Unable to find Mach task port for process-id 1401

参考

  1. 如何在 Linux 系统中的 VS Code 上配置 C/C++ 环境
  2. VSCode+Opencv(C++)+Win10
  3. VScode搭建OpenCV环境⭐️⭐️⭐️,推荐。
  4. OpenCV使用CMake和MinGW-w64的编译安装⭐️⭐️⭐️,推荐
  5. OpenCV-MinGW-Build:已经编译好的OpenCV库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1完成一个Vue后台管理项目(一、创建项目)

1.创建文件夹 这很简单&#xff0c;自己选一个盘&#xff0c;然后建一个文件夹即可 我选择的是D盘&#xff0c;最后的目录是vue-admin 注意&#xff1a;最后的目录一定要是英文 2.创建项目 初始化 npm init -y 局部安装vue-cli vue-cli的版本一直在更新&#xff0c;所以不推…

品牌舆情总结及品牌修复,品牌舆情监测监控怎么做?

如今互联网大数据时代&#xff0c;信息流通越来越快&#xff0c;影响覆盖面广。品牌一旦出现舆论&#xff0c;很容易引起大范围的热议&#xff0c;对品牌发展造成不利影响&#xff0c;进而影响品牌声誉。接下来TOOM舆情监测小编带您简单了解品牌舆情总结及品牌修复&#xff0c;…

Linux_Study

文章目录1.操作系统概述1.1 操作系统的作用1.2 常见的操作系统2.Linux介绍2.1 诞生2.2 Linux内核3. Linux基础操作3.1 虚拟机快照3.2 Linux 目录结构3.3 命令、命令行3.4 ls命令&#xff08;列表命令&#xff09;3.5 cd/pwd命令&#xff08;目录命令&#xff09;3.6 相对路径、…

OPENCPU学习---开发环境搭建

BC260Y-CN模组移远公司提供了QuecOpen的开发方案&#xff0c;可以通过提供的SDK中相应的接口快速进行应用开发。开发环境的搭建&#xff0c;首先要准备好开发板、SDK包以及下载工具&#xff0c;准备好后进行编译配置即可进行开发。目前移远提供的BC260Y开发SDK版本为&#xff1…

Lambda表达式超详细总结(简单易懂)

文章目录1、什么是Lambda表达式2、为什么使用Lambda表达式3、函数式接口&#xff08;lambda表达式的使用前提&#xff09;4、推导Lambda表达式5、Lambda表达式语法1、什么是Lambda表达式 Lambda表达式&#xff0c;也可称为闭包。其本质属于函数式编程的概念&#xff0c;是Java…

js判断元素是否在可视区域内

基本概念 首先需要搞清楚 clientHeight、scrollTop 的区别&#xff0c;通俗地说&#xff0c;clientHeight 指的是网页可视区域的高度&#xff0c;scrollTop 指的是网页被卷起来的高度&#xff0c;可以参考这篇文章&#xff1a;彻底搞懂clientHeight、offsetHeight、scrollHeig…

SQL -- MySQL 初识

SQL SQL的概述&#xff1a; SQL全称&#xff1a; Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。 SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统System上实现美国国家…

入门远程连接技术

目录 1、ssh实验 要求&#xff1a;a.两台机器&#xff1a;第一台机器作为客户端&#xff0c;第二台机器作为服务器&#xff0c;在第一台使用rhce用户免密登录第二台机器。b.禁止root用户远程登录和设置三个用户sshuser1, sshuser2, sshuser3&#xff0c; 只允许sshuser3登录&…

DOM(二):节点操作、事件高级

节点操作节点层级事件高级事件对象节点概述 节点至少拥有nodeType&#xff08;节点类型&#xff09;、nodeName&#xff08;节点名称&#xff09;、nodeValue&#xff08;节点值&#xff09;这三个基本属性。 元素节点 nodeType为1属性节点 nodeType为2文本节点 nodeType为3 &…

字节前端必会vue面试题集锦

Vue3有了解过吗&#xff1f;能说说跟vue2的区别吗&#xff1f; 1. 哪些变化 从上图中&#xff0c;我们可以概览Vue3的新特性&#xff0c;如下&#xff1a; 速度更快体积减少更易维护更接近原生更易使用 1.1 速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的…

3、数据库中的约束数据库设计

约束 * 概念&#xff1a; 对表中的数据进行限定&#xff0c;保证数据的正确性、有效性和完整性。 * 分类&#xff1a; 1. 主键约束&#xff1a;primary key 2. 非空约束&#xff1a;not null 3. 唯一约束&#xff1a;unique 4. 外键约束&#xff1a;forei…

3.0里程碑:Topomel Box 现已在微软商店可用

猿友好&#xff01; 今天是个大喜的日子 我的程序 Topomel Box 的第三个版本(3.0)正式上架微软商店。通过微软商店这个统一的分发渠道&#xff0c;Topomel Box 有望与更多国家的用户见面并提供服务。 安装方法很简单&#xff0c;只需要打开微软商店&#xff08;Microsoft Sto…

⚡️【数据结构】二叉树的概念和相关知识总结

&#x1f332;目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1概念 2.2满二叉树 2.3完全二叉树 2.4满二叉树和完全二叉树的区别 2.5二叉树的性质 2.6…

linux日志管理总结,rules详解、轮转详解、实例展示。

概述 ​ 1、日志文件记录系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等 ​ 2、通过日志来检查错误发生的原因&#xff0c;或者受到攻击时攻击者留下的痕迹。 1. rsyslog系统日志管理 1.1 处理日志的程序&#…

工控安全-Modbus重放攻击

文章目录Modbus-重放攻击Modbus-仿真环境(ModSim)Modbus-协议采集(ModbusScan)抓取Modbus/TCP流量使用青云工具进行重放攻击Modbus-重放攻击 Modbus-仿真环境(ModSim) 首先开启Modbus仿真环境 ip地址是10.10.100.11 ModSim32&#xff0c;这个软件是模拟Modbus协议的一个仿真…

git push错误->Error: src refspec master does not match any

参考文章问题描述&#xff1a;在执行命令 git push origin master 时报错->Error: src refspec master does not match any问题分析&#xff1a;在网上查找解决方法&#xff0c;大部分人说是暂存区没有文件&#xff0c;未执行git add 导致出错。但是此时已经执行了git add 操…

将石油和天然气推向边缘

无论是来自在线购物交易还是工业环境中的物联网&#xff08;IoT&#xff09;设备&#xff0c;数据都是不断收集的。幸运的是&#xff0c;世界各地的每一个行业都可以利用这一趋势&#xff0c;许多行业都已经这样做了。在石油和天然气行业&#xff0c;持续的数据通信是现在保持完…

JavaScript刷LeetCode-字符串类解题技巧

序章 我们把字符串、数组、正则、排序、递归归为简单算法。接下来系列里&#xff0c;将系列文章里将为大家逐一介绍。 字符串 翻转字符串中的单词 给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。示例 1: 输…

数据库和SQL介绍

数据库管理系统&#xff08;数据库软件)那么如何实现这种数据库形式的数据管理呢?我们需要借助:数据库管理系统&#xff0c;也就是常说的数据库软件。数据库软件是非常多的&#xff0c;常见的有:这些软件都能实现︰管理库﹑管理表、基于表来管理数据数据库和SQL的关系数据库是…

Java 诊断利器 Arthas 快速入门

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…