# Windows WSL指南
## 选择WSL版本
- 如果你想将项目存放在Windows系统中,优先选择WSL1。
- 如果你想获得最佳性能并尽量减少 Windows 干扰项目编译的问题,请使用 WSL2 并将项目存放在 Linux 文件系统中(位于 ~/ 目录下)。
## 安装 WSL
1. 以管理员模式打开 [Windows Powershell](https://i.imgur.com/QKmVbP9.png), 执行下面的命令 (鼠标右键或按下Shift+Insert以粘贴到Powershell)。
- WSL1
```powershell
wsl --install -d Ubuntu --enable-wsl1
```
- WSL2
```powershell
wsl --install -d Ubuntu
```
2. 等待命令完成后重启你的电脑
### WSL1
3. 重启后以管理员模式打开Powershell, 执行下面的命令将Ubuntu版本设置为WSL1。
```powershell
wsl --set-version Ubuntu 1
```
### WSL2
3. 重启后以管理员模式打开Powershell, 执行下面的命令将Ubuntu版本设置为WSL2。
```powershell
wsl --set-version Ubuntu 2
```
注意...
> 重启后WSL可能会自动启动,但这并不会影响什么。
### 查看WSL版本
4. 以管理员模式打开Powershell,执行下面的命令
```powershell
wsl --list -v
```
## 安装依赖项
注意事项:
- WSL中复制/粘贴方法
- **鼠标右键** (选中后右键单击复制,未选中内容时右键单击粘贴)
- **Ctrl+Shift+C/Ctrl+Shift+V** (右键单击标题栏,确认已勾选"使用Ctrl+Shift+C/V作为复制/粘贴快捷键")。
- 执行部分命令时需要输入WSL用户密码或手动确认。在需要确认时根据提示输入WSL用户密码或yes/y即可
1. 启动**Ubuntu**( 比如在搜索中启动)。
2. 第一次启动WSL/Ubuntu时将会自动完成安装。等待WSL/Ubuntu安装结束后,需要设置用户名和密码
Note...
> 输入密码时WSL不会显示输入的内容,但它仍在正常获取输入的字符。
3. 通过下面的命令更新WSL,这可能需要一段时间:
```bash
sudo apt update && sudo apt upgrade
```
4. 执行下面的命令以安装编译pokeemerald-expansion的依赖项:
```bash
sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev python3
```
## 在WSL1中设置源码存放位置
Windows不能直接访问WSL的文件,但WSL可以直接访问Windows文件。因此可以将文件存放在Windows系统中。
假设你想将pokeemerald Expansion存放在**C:\Users\\_\_\Desktop\decomps**目录。首先确认这个文件夹存在。然后输入下面的命令进入该文件夹(**\**指Windows系统用户名):
```bash
cd /mnt/c/Users//Desktop/decomps
```
注意……
> 1: Windows C:\ 盘在WSL中对应/mnt/c/。
> 2: 如果路径中包含空格,则必须用"将整个路径包围起来,例如`"/mnt/c/users//Desktop/decomp folder"`。
> 3: Windows路径是大小写不敏感的,所以无需注意大小写问题。
## 在WSL2中设置源码存放位置
Windows不能直接访问WSL的文件,但WSL可以直接访问Windows文件。但在WSL2中访问Windows文件速度很慢,因此最好将文件存放在WSL2中。
要从 Windows 访问 WSL中的文件,你需要在文件资源管理器中将 WSL 文件系统作为网络附加存储打开,它应该位于左侧边栏的底部,显示为“Linux”。
在WSL中运行下面的命令以创建一个文件夹用于存放pokeemerald-expansion(如果这个文件夹不存在)
```bash
cd ~/
mkdir decomps
```
运行下面的命令进入存放pokeemerald-expansion的文件夹
```bash
cd ~/decomps
```
## WSL更新或安装依赖时错误解决
更新WSL或安装依赖项时如果出现以下错误提示
```console
E: Sub-process /usr/bin/dpkg returned an error code (1)
```
可先执行以下命令
```bash
sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old
sudo mkdir /var/lib/dpkg/info
```
等待命令执行完毕后再次运行更新WSL或安装依赖项命令。更新或安装完毕后运行以下命令以恢复pkg信息
```bash
sudo mv /var/lib/dpkg/info_old/* /var/lib/dpkg/info/
sudo rmdir /var/lib/dpkg/info_old
```
如果出现以下提示,并列出可移除的包名(以libllvm17t64为例)
```console
The following package was automatically installed and is no longer required:
libllvm17t64
```
可执行以下命令解决该提示
```bash
sudo apt autoremove
sudo apt install libllvm17t64
```