(转载)vscode配置OpenCV下C编译环境

VSCode C++与OpenCV环境配置
本文详细介绍了在VSCode中配置C++及OpenCV环境的步骤,包括安装扩展、设置launch.json和task.json文件,以及解决OpenCV头文件和库文件包含问题。

转载

环境说明
在此演示的是Ubuntu 18.04系统下的环境配置, 但大部分是通用的, 所以用MacOS和win10(对, 不是Windows, 是win10, 别问我为什么)的小伙伴也能看看.
首先, 你得安装vscode…
安装好了之后,要添加c++扩展,这一部一般不会出什么问题, 我在win10环境、MacOS环境乃至另一台电脑的Ubuntu 18.04环境里都没遇到这个问题,但偏偏在公司电脑上,出现了/home/username/.vscode/extensions 没有读写权限的问题,可以手动下载扩展解决,也可以用

sudo chmod o+w '/home/username/.vscode
sudo chmod o+w '/home/username/.vscode/extensions

两句命令强行修改文件夹读写权限,然后愉快地在vscode中直接添加C++扩展了。
添加扩展
这个可说的不多,直接在Extension中搜C++,然后选且只选第一个扩展
在这里插入图片描述

安装之后,这一步就大功告成。
vscode-cpptools 配置
这一部分,是通用的C++编译、debug配置,主要设计两个文件。
launch.json
这个文件主要是配置debug,具体设置如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.o",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "preLaunchTask": "g++",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
    ]
}

我主要关注三个参数:

program
这一参数指明debug时运行哪个程序,“program”: “ w o r k s p a c e F o l d e r / {workspaceFolder}/ workspaceFolder/{fileBasenameNoExtension}.o”,表明是要运行当前目录中与被编译文件同名的.o后缀文件
MIMode
这一参数指明要使用的debug工具,Ubuntu环境下当然是gdb。win10环境下是MinGW,MacOS环境下是lldb。
miDebuggerPath
这一句也很重要。在默认生成的launch.json文件中并没有这一参数的设置语句,但这一句却是最重要的,因为有了这一句,vscode在编译运行cpp文件时才能找到gdb程序。
一般情况下,gdb是被安装在/usr/bin/gdb目录下,所以这一句为:“miDebuggerPath”: “/usr/bin/gdb”,

当然这里的理解都很粗浅,要详细了解launch.json文件,还是到扩展的官网上去看看。
设置好launch.json文件后,按道理已经可以试着运行cpp文件了,当然你一试vscode就会提示你不存在jiayiju${fileBasenameNoExtension}.o,因为我们还没有编译呢。
所以,要在launch.json中加一句"preLaunchTask": “g++”,,指定一个运行前任务,编译我们写好的cpp文件。
task.json
一般情况下,在上一步运行失败之后,会直接提示你设置task.json文件,如果没有,你也可以点击Ctrl+Shift+P"调出命令面板,然后搜索Task,点击第一个

在这里插入图片描述
会提示你依据模板创建task.json,这里不管什么模板,随便选一个,然后直接复制粘贴以下设置代码:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "command": "g++",
    "args": [
        "-g", 
        "-std=c++11", 
        "${file}", 
        "-o", 
        "${fileBasenameNoExtension}.o",
    ],// 编译命令参数
    "problemMatcher":{
        "owner": "cpp",
        "fileLocation":[
            "relative",
            "${workspaceFolder}"
        ],
        "pattern":[
            {
                "regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
                "file": 1,
                "location": 2,
                "message": 3
            }
        ]
    },
    "group": {
        "kind": "build",
        "isDefault": true
    }
}

这部分代码中,重点当然在

"command": "g++",
    "args": [
        "-g", 
        "${file}", 
        "-o", 
        "${fileBasenameNoExtension}.o",
    ],// 编译命令参数

明眼人一看就知道这就是g++编译命令,不必多说。要注意最后一个参数" f i l e B a s e n a m e N o E x t e n s i o n . o " , , 必 须 跟 l a u n c h . j s o n 中 p r o g r a m 参 数 ( " {fileBasenameNoExtension}.o",,必须跟launch.json中program参数(" fileBasenameNoExtension.o",launch.jsonprogram("{workspaceFolder}/${fileBasenameNoExtension}.o")的文件名相对应。
还有一点就是,如果要设置label参数的话,要将之设置为preLaunchTask的值。不记得preLaunchTask的童鞋回头看看launch.json。
这部分通用的C++编译运行设置就OK了,现在你可以愉快地用vscode写hello world了,但是我们的征程是星辰大海和opnencv,所以,还得继续折腾。
OpenCV 编译环境配置
配置opencv,其实主要就解决两个问题,一个是头文件包含,一个是库文件搜索。头文件包含在c_cpp_properties.json中解决,库文件包含则要继续修改task.json中的编译命令。
首先来看c_cpp_properties.json:
c_cpp_properties.json
怎么打开这个文件呢,两种方式,一个就是打开命令面板(还记得那个快捷键吗?我一直记,一直忘),然后搜索cpp: Edit,点击结果就可以进入这一文件。
另一种就是在自己的cpp文件里直接包含opencv库,聪明的cpp扩展会给你一个小提示提醒你打开c_cpp_properties.json设置头文件包含。
不说废话:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/include", //请确保你的opencv opencv2头文件夹安装在这个目录
                "/usr/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

task.json
上一步解决头文件包含,这里就要解决库文件搜索,也简单,直接修改编译命令,也就是task.json中的args参数:

"args": [
        "-g", "-std=c++11", "${file}", "-o", "${fileBasenameNoExtension}.o",// 设置动态链接库
        "-I", "/usr/local/include",
        "-I", "/usr/local/include/opencv",
        "-I", "/usr/local/include/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"
    ],// 编译命令参数

其中-I表示头文件目录,-L表示库文件目录,-l表示库文件。
注意,这里有个天坑。
一般来说,"-l", “opencv_core”,这一语句的后一个参数表示库文件名,而且是去掉.dll、.lib、.so、.a后缀的,但是Ubuntu系统编译的opencv库文件命名方式大多数为libxxx.so,所以如果你很老实的去个后缀,写成"-l", “libopencv_core”,,那我跟你讲,报错报到你怀疑人生!!!
库文件坑踩过以后,又遇到个偶发事件,缺少libjasper.so.1,有啥办法,安装呗。
命令如下:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

搞定这个之后,基本上就大功告成,如有其他问题,欢迎讨论。
感谢
libjasper.so.1问题的解决:
https://blog.youkuaiyun.com/weixin_41053564/article/details/81254410
各个json文件设置的参考:
https://blog.youkuaiyun.com/zoeou/article/details/80934367

作者:刹那里
链接:https://www.jianshu.com/p/6d3f4a30945d
来源:简书

<think>我们正在配置Linux下的VSCode环境,用于使用CMake构建OpenCV项目。以下是步骤: 1. 确保已安装VSCode、CMake、GCC/G++编译器和OpenCV库。 2. 在VSCode中安装必要的扩展:C/C++、CMake Tools。 3. 创建一个项目目录,并在其中创建CMakeLists.txt和源文件(如main.cpp)。 4. 编写CMakeLists.txt,配置OpenCV的依赖。 5. 使用CMake Tools配置并构建项目。 详细步骤: 步骤1:安装基础软件 - 安装VSCode:从官网下载.deb包或通过包管理器安装。 - 安装CMake和构建工具: ```bash sudo apt update sudo apt install cmake gcc g++ make ``` - 安装OpenCV:建议使用包管理器安装(以Ubuntu为例): ```bash sudo apt install libopencv-dev ``` 步骤2:在VSCode中安装扩展 - 打开VSCode,进入扩展市场,搜索并安装: - C/C++ (Microsoft) - CMake Tools (Microsoft) 步骤3:创建项目 - 创建一个项目目录,例如`opencv_test`,并打开该目录。 - 在目录中创建源文件`main.cpp`,并编写测试代码(见步骤4)。 - 创建`CMakeLists.txt`文件。 步骤4:编写CMakeLists.txt 示例内容: ```cmake cmake_minimum_required(VERSION 3.10) project(OpenCV_Test) # 寻找OpenCV包 find_package(OpenCV REQUIRED) # 添加可执行文件 add_executable(opencv_test main.cpp) # 链接OpenCV库 target_link_libraries(opencv_test ${OpenCV_LIBS}) ``` 步骤5:编写测试代码(main.cpp) 示例代码(显示一张图片): ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { if (argc != 2) { cout << "Usage: display_image ImagePath" << endl; return -1; } Mat image = imread(argv[1], IMREAD_COLOR); if (image.empty()) { cout << "Could not open or find the image" << endl; return -1; } namedWindow("Display window", WINDOW_AUTOSIZE); imshow("Display window", image); waitKey(0); return 0; } ``` 步骤6:配置和构建 - 打开VSCode,打开项目目录。 - 按下`Ctrl+Shift+P`,输入`CMake: Configure`,选择编译器(如GCC)。 - 配置完成后,按下`F7`或使用`CMake: Build`命令构建项目。 步骤7:运行 - 构建成功后,在终端中运行生成的可执行文件(默认在build目录下): ```bash ./build/opencv_test /path/to/your/image.jpg ``` 注意:如果OpenCV安装在非标准路径,可能需要在CMake配置时指定OpenCV_DIR,例如: ```cmake set(OpenCV_DIR "/path/to/opencv/build") ``` 然后再调用`find_package`。 引用说明: [^1] 提到了在Windows下配置的踩坑经历,但我们在Linux下配置,所以主要参考通用步骤。 [^2] 提到了CMake配置OpenCV时可能遇到的问题,特别是如果OpenCV安装在不标准的位置,需要设置CMAKE_PREFIX_PATH或OpenCV_DIR。 [^3] 提供了一个Windows下的VSCode配置示例,我们可以借鉴其项目结构,但路径和设置需要调整为Linux风格。 相关问题: 1. 在Linux中如何安装OpenCV的特定版本? 2. 如果CMake找不到OpenCV库,应该如何处理? 3. 如何配置VSCode的调试环境来调试OpenCV程序?</think>### Linux VSCode CMake OpenCV 环境配置指南 #### 1. **安装基础依赖** ```bash sudo apt update sudo apt install build-essential cmake git libgtk2.0-dev pkg-config ``` #### 2. **安装 OpenCV** ```bash # 安装核心库 sudo apt install libopencv-dev # 验证安装 (应显示版本号) pkg-config --modversion opencv ``` #### 3. **配置 VSCode 环境** 1. 安装扩展: - C/C++ (Microsoft) - CMake Tools (Microsoft) - CMake (twxs) 2. 创建项目结构: ``` your_project/ ├── .vscode/ │ ├── c_cpp_properties.json │ └── settings.json ├── CMakeLists.txt └── main.cpp ``` #### 4. **配置文件** `c_cpp_properties.json`: ```json { "configurations": [{ "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/include/opencv4" ], "defines": [], "compilerPath": "/usr/bin/g++", "cStandard": "c17", "cppStandard": "c++17" }] } ``` `CMakeLists.txt`: ```cmake cmake_minimum_required(VERSION 3.10) project(OpenCV_Project) # 查找OpenCV find_package(OpenCV REQUIRED) # 添加可执行文件 add_executable(main main.cpp) # 链接OpenCV库 target_link_libraries(main ${OpenCV_LIBS}) ``` #### 5. **测试代码 (`main.cpp`)** ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("test.jpg"); if(image.empty()) return -1; imshow("OpenCV Test", image); waitKey(0); return 0; } ``` #### 6. **编译与调试** 1. 按 `Ctrl+Shift+P` > `CMake: Configure` 2. 选择 `GCC` 编译器 3. 按 `F7` 编译项目 4. 按 `F5` 调试执行 #### 7. **常见问题解决** - **找不到 OpenCV**: 在 `CMakeLists.txt` 中添加: ```cmake set(OpenCV_DIR "/usr/share/opencv4") # 根据实际路径调整 ``` - **链接错误**: 检查 `target_link_libraries` 是否包含 `${OpenCV_LIBS}` - **图像加载失败**: 确保图像路径正确,使用绝对路径如 `"/home/user/test.jpg"`[^3] > 提示:使用 `vcpkg` 可管理特定版本 OpenCV: > ```bash > git clone https://github.com/microsoft/vcpkg > ./vcpkg/bootstrap-vcpkg.sh > ./vcpkg install opencv[contrib] > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值