网上有很多相关文章,但是不是很全面或者很清楚,所以这里我总结一下;
一:开发环境:
Windows 7 + VM(LinuxMint(Ubuntu)16.04) + Visual Studio 2017;
1:安装VS2017,要勾选“使用C++的Linux开发”工具集;(网上比较多相关文章)
2:在LinuxMint中安装gcc,gdb等工具:
https://learn.microsoft.com/zh-cn/cpp/linux/download-install-and-setup-the-linux-development-workload?view=msvc-170
sudo apt-get install openssh-server g++ gdb gdbserver
sudo apt-get install openssh-server g++ gdb make ninja-build rsync zip
sudo apt-get install build-essential
sudo apt-get install build-essential gdb
sudo apt-get install cmake
sudo apt-get install git
sudo apt-get install nasm
sudo apt-get install yasm
-
在 Linux 系统上,安装并启动 OpenSSH 服务器:
Bash复制
sudo apt install openssh-server sudo service ssh start
-
若要让 SSH 服务器在系统启动时自动启动,请使用 systemctl 启用它:
Bash复制
sudo systemctl enable ssh
ssh-server配置文件:/etc/ssh/sshd_config;
默认端口是22
更多细节,可以直接查看:在 Visual Studio 中配置 Linux MSBuild C++ 项目 | Microsoft Learn
通过 Linux 命令 : whoami 查看用户名
3:创建VS Linux项目:
新建项目 - 跨平台 - Linux - 控制台应用程序
添加库文件,可以写绝对路径,也可以直接用工程路径变量代替,如工程目录下有lib文件夹:
$(RemoteRootDir)/lib/test.a
注: 虽然 cmake 也可以简单制作 CMakelist.txt 实现,但是在调试过程中,这个更接近 visual studio,而且效率更高;
添加文件:
添加文件,和win 上的 有些不同:
1:用到的 h 文件,一般程序中 #include 就可以了,这里需要添加到工程中;
2:用到的 .a 文件,和所有相关文件,都需要 add 到工程中;
因为,每次编译,visual studio Linux 会将工程文件复制到 ubuntu 系统中一份;
4:"F5",会填充链接Linux的 主机IP + 用户名 + 密码;
输入,确定就可以了;
5:编译,运行,默认会在目标机器(Linux上的用户目录下,也会将相关程序文件和目录复制到Linux的~/Project目录中一份,也会编译出相关程序);
注意:虽然代码编写环境是win7,但是,程序中用到的目录,如,环境配置目录,文件读写目录,一定是目标机器Linux的上的路径;
这里,就看编译出一个Linux上的程序了;也可以调试;
二:添加链接调试第三方库:
但是如果想要链接第三方库?
这里示例用FFmpeg库来说明:
和通常的MFC配置环境没有差不多,但是有些不同;
还是要注意,环境是指定是目标机器的环境;
参考:
https://www.cnblogs.com/dongc/p/6599461.html
http://www.linuxidc.com/Linux/2017-03/141704.htm
//
其实用Qt MinGW 或者cmake 也可以上述方式没有环境工程,在Linux再次开发的时候,还需要手写工程配置文件;
或者直接在window上开发,主要跨平台用法,开发完成后再在Linux上简单一直;
或者直接用Qt在Linux开发也可以;
如果用 visual studio code 调试 Ubuntu 上的程序;
就以一般的C++ ,cmake 作为示例:
安装完成 visual studio code后,安装相关模块:
简单的话,直接搜索:C/C++ Extension Pack, (Microsoft),这样就之间安装相关的所有模块了;
然后,然后ssh server;
有两个方法调试程序,
方法一:
当然就是本地直接调试,当然最好的方式,
如果工程文件需要root权限,有两个方式,
1:以管理员权限启动 visual studio code: sudo code --user-data-dir="~/.vscode-root"
2:sudo chmod -R 777 project_dir
我觉得 方法2 比较简单,这样每次就可以只直接启动vscode了,不用上面管理员权限启动;而且远程调试的时候也没有权限限制;
方法二:
如果需要远程调试,
比如在 win10 上安装 visual studio code,那么 ssh 远程调试,有可能会遇到 Ubuntu 中的工程权限问题,不可以修改文件,所以还是需要上述的 方法2 修改工程目录;
如果用 visual studio 2022调试 Ubuntu 上的程序;
这里以 ubuntu 上 FFmpeg 编译调试为例:
环境:win11 + VMware_Ubuntu + 共享文件夹(E:\Vmvolume)
将 FFmpeg 代码 从 Ubuntu 中 git clone 到 共享文件夹:/mnt/hgfs/VMvolume/
这样 可以在 win11上直接调试修改FFmpeg源码,然后 ssh远程命令行,或者直接进入VM再次编译调试同一份代码;
1:获取 FFmpeg 代码
ubuntu:/mnt/hgfs/VMvolume/ffmpeg$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
2:进入FFmpeg目录,直接简单编译,
/mnt/hgfs/VMvolume/ffmpeg$ ./configure --prefix=../ffmpeglib
make install 后, 默认 Debug 版本 静态库文件 就到 ffmpeglib 文件夹中了;
3: 在 win11 vs 创建 Linux 控制台程序,就是这个;
4:配置自己的测试工程:
如果是C++:
#include <cstdio>
#ifdef __cplusplus
extern "C"
{
#endif
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
#include <libavutil/opt.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>
#ifdef __cplusplus
}
#endif
int main1()
{
return 0;
}
这里简单用 sample 就可以了;
配置 FFmpeg库:
5:配置 ffmpeg 头文件;
Linux 中的头文件 路径,整理直接用ffmpeg源码路径,不是安装路径
配置 静态库文件;
avcodec;avfilter;avformat;avutil;swresample;swscale;pthread
和命令行是一样的;
添加 pthread 这个库文件,系统的直接添加
6:调试:
第一次 into ffmpeg 函数提示 源文件目录 在 虚拟机中的 ffmepg 源码文件路径,但是 在win11 中,直接选择 共享目录 E:\VMvolum\ffmpeg 这个路径中的同样文件,然就可以调试了;
如果修改ffmpeg源码,需要 ubuntu 中重新编译,当然,可以直接在 vs 中的远程命令行中直接运行命令;
vscode 远程 Linux 开发 cmake
Windows vscode + vm_ubuntu
1:首先 vscode 远程 ssh 链接到 ubuntu
2:在 ubuntu 上创建 cmake 工程;
3:在 vscode 中: File -> Add Folder to WorkSpace...
或者,直接打开文件夹:
4:然后会提示 组要远程安装一些插件,直接安装就可以了;
5:右键 到 CMakelists.txt 就可以看到 Build All Projects;
6:编译,和 调试: