03在Windows下通过VSCode远程Linux服务器调试C/C++加强版(包含头文件和链接静态库,动态库的配置)

03在Windows下通过VSCode远程Linux服务器调试C/C++加强版(包含头文件和链接静态库,动态库的配置)

其余VSCode的文章:
01Windows使用VSCode远程Linux(Ubuntu/CentOS)开发/调试C/C++(超详细)
02Windows下利用VSCode调试C/C++代码
03在Windows下通过VSCode远程Linux服务器调试C/C++加强版(包含头文件和链接静态库,动态库的配置)
04在Windows下通过VSCode远程Linux服务器调试C/C++加强版Plus(包含使用Cmake配合脚本在VSCode中编译)

1 VSCode添加链接静态库,动态库的配置文件加强版
上一篇其实我们已经讲了如何添加只有头文件的库了,即spdlog日志库,下面将利用VSCode链接FFmpeg的静态库和动态库进行讲解。
1)直接将我的三个json配置文件拷贝过去,然后改对应的-I(大写i),-L,-l(小写的L)等相应路径,每个配置文件的顶部已经告诉你具体需要修改哪些了。这里不多说。
tasks.json:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format

    // tasks需要改command,-I的路径和cwd即可,-o的参数最好生成在.cpp文件当前目录.
    //   注意:路径的出错很多时候与我们vscode打开时不是项目所在路径相关
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell", //类型
            "label": "main", //任务名称 
            "command": "/usr/bin/g++", //命令,Windows需要修改对应的编译器路径,但是添加了环境变量只写g++即可(Linux下必须写绝对路径)
            "args": [
                "-g",
                "${workspaceFolder}/src/main.cpp",
                "${workspaceFolder}/src/GetInputVideoInfo.cpp", //${workspaceFolder}代表我们vscode打开的文件夹,一般都是项目文件夹,方便操作(以后你就知道了)

                //编译包含的头文件,与c_cpp_properties.json的includePath不一样,前者是编译使用,includePath是给VSCode不报错使用
                //注意每个头文件必须给-I,库文件的-L和-l也同理(我当时就因为这个搞了很久).
                "-I",                                       
                //"/usr/local/ffmpeg/include",可以用系统的库代替下面的ffmpeg的include,lib同样
                "${workspaceFolder}/ffmpeg/include",//ffmpeg
                "-I",
                "${workspaceFolder}/spdlogInclude",//spdlog
                "-I",
                "${workspaceFolder}/rapidjson",//rapidjson

                "-L",
                //"/usr/local/ffmpeg/lib",
                "${workspaceFolder}/ffmpeg/lib",
                "-l",
                "avcodec",
                "-l",
                "avdevice",
                "-l",
                "avfilter",
                "-l",
                "avformat",
                "-l",
                "avutil",
                "-l",
                "swresample",
                "-l",
                "swscale",
                
                "-o",//要生成的可执行文件路径.fileDirname指当前目录,fileBasenameNoExtension指可执行程序无后缀的字符串.该.exe路径可以任意指定,这里使用workspaceFolder更方便
                "${workspaceFolder}/main",
                "-ggdb3",//生成和调试有关的信息
                "-Wall",
                //"-static-libgcc",//静态链接
                "-std=c++11",//使用c++11标准
                "-finput-charset=UTF-8",//输入编译器文本编码,默认为UTF-8
                //"-fexec-charset=GB18030",//输出的exe文件的编码(Window)
                //"-D _USE_MATH_DEFINES"
            ],
            "options":{
                "cwd": "/usr/bin/" //上面command字段的路径
            },
            "problemMatcher": [
                "$gcc"
            ],
            "presentation": {
                "echo": true,
                "reveal": "always",//在终端中显示编译信息的策略,可以我ialways.silent.never
                "focus": false,
                "panel": "shared",//不同的文件的编译信息共享一个终端面板
                //"showReuseMessage": true,
                //"clear": false
            }
        },
    ]
}

launch.json:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

    // launch需要改program,miDebuggerPath即可,但是需要注意preLaunchTask需要与任务的label相同,这样才可以调试对应的任务.
    //注意:路径的出错很多时候与我们vscode打开时不是项目所在路径相关
    "version": "0.2.0",
    "configurations": [
        {
            "name": "main", //名称随便取
            "type": "cppdbg", //调试类型
            "request": "launch", //请求配置类型
            "program": "${workspaceFolder}/main", //可执行程序完整路径(包含程序名称),必须正确,否则无法调试可执行程序
            "args": [],
            "stopAtEntry": false,//程序调试时是否暂停在程序入口处
            "cwd": "${workspaceFolder}", //调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
            "environment": [],
            "externalConsole": false,//调试时是否显示控制台窗口,一般设为true显示控制台窗口,即cmd窗口
            "MIMode": "gdb",         //调试模式,一般是gdb
            "miDebuggerPath": "/usr/bin/gdb", //调试路径,即gdb完整路径,Windows时需要配置环境变量,改成该Min路径
            "preLaunchTask": "main", //调试前开始执行的任务名称(与tasks.json中名称一致),如果有多个任务,这里可以唯一指定想要调试的任务
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            
            
        }
    ]
}

c_cpp_properties.json:

//本文一般需要改编译的命令compileCommands,和只能检索头文件的includePath路径.
//includePath是你其它文件能否被检测的重要字段.
//例如"spdlog/spdlog.h"头文件,若不包含/home/tyy/spdlog/include,则显示红色错误

//注意:路径的出错很多时候与我们vscode打开时不是项目所在路径相关

{
    "configurations": [
        {
            "name":"gdb",//或者MinGW64(WIndows编译器)
            "intelliSenseMode":"gcc-x64",
            "compileCommands": "/usr/bin/gcc",  //此文件一般只需改这里,g++,gcc,gdb都可以
            "includePath": [                    //添加自己项目目录的对应头文件路径,让vscode智能检索,但不是编译的包含头文件,两者不一样
                "/usr/local/include",
                "${workspaceFolder}/spdlogInclude",
                "${workspaceFolder}/ffmpeg/include",  //workspaceFolder代表你vscode打开的工作目录,即左上角的大写字体
                "${workspaceFolder}/rapidjson"        //rapidjson
            ],
            "cStandard": "c11",
            "cppStandard": "c++11"
        }
    ],
    "version": 4
}

2)接下来当我们按下F5想要运行时,实际上还不行,它会显示链接失败,类似如下的错误,因为实际上它还是没有把动态库链接进来。

在这里插入图片描述

3)所以我们需要修改环境变量,将FFmpeg动态库的路径添加在环境变量中。这是我的做法:

sudo vim /etc/ld.so.conf	//需要输入密码

然后添加对应动态库的路径,可以是系统安装目录,也可以是你在项目中FFmepg/lib的目录,前提是你拷贝ffmpeg的lib到项目下:
在这里插入图片描述
然后更新我们刚刚设置的配置:

sudo ldconfig

结果如下就Ok了。
在这里插入图片描述

4)然后按F5执行,可以执行调用对应的库,我这里用了几个库都是成功的。
结果,成功打印视频的信息:
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值