zoukankan      html  css  js  c++  java
  • Ubuntu 18.04系统下的环境配置vscode&&opencv&&c++

    环境说明

    在此演示的是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++,然后选且只选第一个扩展

     
    image.png

    安装之后,这一步就大功告成。

     

    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
                    }
                ]
            },
        ]
    }
    

    我主要关注三个参数:

    1. program
      这一参数指明debug时运行哪个程序,"program": "${workspaceFolder}/${fileBasenameNoExtension}.o",表明是要运行当前目录中与被编译文件同名的.o后缀文件
    2. MIMode
      这一参数指明要使用的debug工具,Ubuntu环境下当然是gdb。win10环境下是MinGW,MacOS环境下是lldb。
    3. 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++编译命令,不必多说。要注意最后一个参数"${fileBasenameNoExtension}.o",,必须跟launch.json中program参数("${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.csdn.net/weixin_41053564/article/details/81254410
    各个json文件设置的参考:
    https://blog.csdn.net/zoeou/article/details/80934367



    作者:刹那里
    链接:https://www.jianshu.com/p/6d3f4a30945d
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    java-线程(一)
    Lucene小例子
    Oracle在Java中事物管理
    sort quick
    static静态数据的初始化
    正则表达式30分钟入门教程
    div遮罩弹框口
    EL表达式
    LeetCode: Invert Binary Tree
    LeetCode: Find the Difference
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/10082635.html
Copyright © 2011-2022 走看看