Window wsl2编译环境搭建

74 阅读5分钟

如果习惯于window+编译服务器进行开发,那通过WSL2搭建一个简单的开发环境是一个不错的选择。这种方案可以实现Windows和Linux环境的无缝融合:在Windows编辑器如VS Code中处理Linux环境代码,并通过linux对代码进程编译。

WSL2(Windows Subsystem for Linux 2)相对于其前身WSL1和传统的虚拟机,拥有近乎原生的性能优势。WSL2使用了一个真正的Linux内核,在它的虚拟硬盘(ext4文件系统)上进行文件操作,其I/O性能比WSL1快数倍到数十倍。几乎所有系统调用都得到原生支持,无需翻译。这使得需要复杂系统调用的应用(如Docker)能够完美运行。 WSL2在提供高性能Linux环境的同时,保持了与Windows系统的深度集成。

从 Windows 访问 Linux 文件:可以通过 \wsl$<DistroName> 在Windows文件资源管理器中轻松访问WSL2内的文件,反之亦然。

从 Linux 访问 Windows 文件:WSL2将Windows驱动器自动挂载在 /mnt/c, /mnt/d 等目录下。

在 Windows 中运行 Linux 命令:可以在Windows PowerShell或CMD中直接输入 wsl 来执行Linux命令(例如 wsl ls -la)。

环境安装:

window官方已经有详细的安装说明,可以参考链接:learn.microsoft.com/zh-cn/windo… 基本步骤如下:

1.设置-程序和功能-启用或关闭window功能-启用“适用于 Linux 的 Windows 子系统”

2.在管理员模式下打开 PowerShell,输入 wsl --install 命令

3.wsl --set-version Ubuntu 2 将 Ubuntu 分发设置为使用 WSL 2

4.打开 Microsoft Store安装Linux 分发版,例如Ubuntu等。

5.打开窗口创建用户帐户和密码

日常使用建议:

1.安装Windows Terminal(强烈推荐):Windows Terminal是一款功能强大、外观现代的终端应用程序,可以完美管理WSL、PowerShell等多种环境。你可以在Microsoft Store中搜索"Windows Terminal"并安装。

2.配置VS Code与WSL集成:

  • Visual Studio Code:安装 WSL 扩展后,可以直接在Windows的VS Code中打开WSL里的项目文件夹,获得语法高亮、智能补全等所有IDE功能,同时所有操作都在Linux环境下执行可以在WSL子系统中直接使用 code . 命令来打开当前文件夹,实现Windows与Linux环境的无缝协作开发。

本文主要记录在使用过程中遇到的一些环境问题。

系统迁移

使用 wsl 提供的 import、export等工具对WSL2系统进行迁移 1.首先使用管理员身份打开命令提示符(cmd),关闭wsl wsl --shutdown 查看是否已经关闭 wsl -l -v

2.导出子系统文件

wsl --export 子系统名称 导出文件路径及名称

wsl --export Ubuntu-20.04 E:\wsl2tar\Ubuntu-20.04.tar

执行完毕后,可以在导出的目录内看到导出的tar包

  1. 注销原有的虚拟机

wsl --unregister 子系统名称

wsl --unregister Ubuntu-20.04

4.导入虚拟机到新的位置

wsl --import 子系统名称 要导入的子系统位置(想要存放子系统的目录) 导入子系统tar包(第三步中导出的tar包路径)

wsl --import Ubuntu-20.04 E:\wsl2 E:\wsl2tar\Ubuntu-20.04.tar

导入完成后,就可以在相应目录看到生成的文件了

5.设置默认用户

Ubuntu2004 config --default-user 用户名

Ubuntu2004 config --default-user ubuntu

至此系统迁移完成。

git加速问题:

如果你在 Windows 系统上使用了代理软件(如 Clash等),需要让 WSL 的 Git 也能走代理。

• 关键点:WSL 中的 127.0.0.1 指向的是 WSL 自身,而非 Windows 宿主系统。你需要通过特定的 IP 地址来访问 Windows 上的代理服务。

• 查找宿主机的 IP:在 WSL 终端中执行 cat /etc/resolv.conf,输出的 nameserver 后面的 IP 通常就是宿主机在 WSL 网络中的地址。

• 设置代理: 你可以选择设置临时环境变量(仅当前终端有效),也可以仅为 Git 配置代理。

方法一:设置环境变量(临时)

在 WSL 终端中执行(端口请替换为你代理软件的实际端口):

export http_proxy=http://172.28.208.1:7890

export https_proxy=http://172.28.208.1:7890

方法二:为 Git 配置代理(持久)

如果希望代理设置对 Git 持久有效,可以执行: bash

git config --global http.proxy http://<宿主机的IP>:7890

git config --global https.proxy https://<宿主机的IP>:7890

PATH空格问题:

在WSL编译时遇到路径中的空格导致编译异常,通常是因为脚本或程序没有正确处理包含空格的路径。

问题根源:PATH环境变量污染,Windows路径(如Program Files (x86))混入WSL的PATH

根本解决:在WSL配置文件 /etc/wsl.conf 中禁止继承Windows的PATH。

appendWindowsPath = false

修改后,重启WSL终端或运行 wsl --shutdown 并重新打开。

如果在WSL中找不到/etc/wsl.conf文件,这完全是正常情况,因为WSL默认并不会创建这个文件。不过别担心,可以手动创建它来调整WSL的配置。

1.创建配置文件sudo touch /etc/wsl.conf创建空的wsl.conf文件,为后续编辑做准备。

2.编辑配置文件sudo nano /etc/wsl.conf使用nano编辑器(或其他您熟悉的编辑器如vim)向文件添加配置。

3.重启WSL生效wsl --shutdown在Windows PowerShell或CMD中执行,彻底关闭WSL后重新启动。

成功创建文件后,您就可以根据自己的需求添加配置了。这里有一些常见的配置示例

示例:阻止WSL将Windows的PATH附加到Linux的PATH中 这有助于解决因Windows路径(如包含空格的Program Files)导致的环境变量问题

appendWindowsPath = false

示例:启用systemd支持 某些服务(如systemctl)在WSL中默认不开启,此配置可激活它们

systemd = true

请注意:在修改配置后,必须执行wsl --shutdown来完全关闭WSL,然后重新启动终端,新的设置才会生效。