Wsl

 

wsl日渐成熟,使用wsl搭建开发环境,避免虚拟机资源占用.

WSL简介

适用于 Linux 的 Windows 子系统(英语:Windows Subsystem for Linux,简称WSL)是一个为在Windows 10和Windows Server 2019上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。

安装

使用管理员权限打开powershell,执行以下命令.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

在microsoft store搜索ubuntu,安装即可.

也可选择商店中的其他版本.

安装完成后直接打开ubuntu程序,或在命令行输入ubuntu均可开始初始化,初始化完成后输入用户名和密码.

wsl设备名和windows相同,不能单独修改.

ssh服务打开

  • 在wsl中重新安装ssh-server(所有教程都这么推荐).
  • 手动修改配置文件,允许密码登录(默认只支持ssh-key登录).可能需要修改端口.
  • 启动服务.
    sudo apt-get remove openssh-server
    sudo apt-get install openssh-server
    sudo vi /etc/ssh/sshd_config  # PasswordAuthentication yes # 允许用户名密码方式登录
    sudo service ssh restart
    

文件共享

在wsl中可以用过 /mnt/c /mnt/d等目录直接访问windows目录.

在windows中可以通过C:\Users{你的用户名}\AppData\Local\Packages{Linux发行版包名}\LocalState\rootfs访问wsl的根目录.

安装vscode

可以下载deb包或添加微软库来安装

网络不好的话下载deb包比较快.

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code # or code-insiders
sudo apt-get install libasound2 #dont't know why

安装settingsync,输入token和gist id.完美.

安装gcc等开发工具

sudo apt install gcc g++ clang cmake

在windows中使用vscode调试wsl中的可执行文件

炫技一般的行为,实际作用堪忧.

  • 修改c++插件设置,让vscode的c++插件可以直接到wsl的头文件目录进行Intellisense.
  • 修改工作去设置,让工作区的默认终端是wsl中断.
  • 修改调试设置,让vscode可以使用wsl的gdb等可执行程序进行调试.
  • 下载libc库,放到特定目录(C:/build/glibc-OTsEL5)

c_cpp_properties.json

{
	"configurations": [
		{
			"name": "WSL",
			"intelliSenseMode": "gcc-x64",
			"compilerPath": "/usr/bin/gcc",
			"includePath": [
				"${workspaceFolder}/**"
			],
			"defines": [
				"LOCAL"
			],
			"cStandard": "c11",
			"cppStandard": "c++14"
		}
	],
	"version": 4
}

settings.json

{
	"terminal.integrated.shell.windows": "C:\\Windows\\System32\\wsl.exe",
	"files.associations": {
		"iostream": "cpp"
	},
}

launch.json 其中sourceFileMap中每个磁盘都需要添加一次转换.

pipeProgram目录确实是空的,但是微软表示就得是这个.

{
	// 使用 IntelliSense 了解相关属性。
	// 悬停以查看现有属性的描述。
	// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
	"version": "0.2.0",
	"configurations": [
		{
			"name": "(gdb) WSL Launch",
			"type": "cppdbg",
			"request": "launch",
			"program": "/mnt/d/code/hello/build/hello",
			"args": [],
			"stopAtEntry": true,
			"cwd": "/mnt/d/code/hello/build",
			"environment": [],
			"externalConsole": true,
			"windows": {
				"MIMode": "gdb",
				"setupCommands": [
					{
						"description": "Enable pretty-printing for gdb",
						"text": "-enable-pretty-printing",
						"ignoreFailures": true
					}
				]
			},
			"pipeTransport": {
				"debuggerPath": "/usr/bin/gdb",
				"pipeProgram": "C:\\Windows\\sysnative\\bash.exe",
				"pipeArgs": [
					"-c"
				],
				"pipeCwd": ""
			},
			"sourceFileMap": {
				"/mnt/c": "c:\\",
			}
		},
	]
}

libc库

我的版本

官网

参考链接:

VSCode使用WSL环境开发C语言配置