windows wsl 编译go配置全过程

Go
2024-03-11 21:17:05

我的项目当中使用webp来压缩服务端图片,在windows上边使用正常,当进行交叉编译时遇到不少错误的麻烦。于是决定使用windows的linux子系统进行linux环境的下Go编译。

安装wsl

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 如果使用的是更早的版本,请参阅手动安装页

现在,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl --install 命令,然后重启计算机

  • 查询可安装的版本

wsl.exe --list --online

txt 复制代码
NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

这里选择安装 Ubuntu20,wsl --install Ubuntu-20.04

我的服务器版本较旧,使用的是ubuntu 20gcc 9,当使用Ubuntu20 编译文件时,发现这本根无法使用。建议一开始选对需要的版本,免于浪费精力。

安装的时候遇到一个错误

txt 复制代码
Ubuntu 20.04 LTS 已安装。
正在启动 Ubuntu 20.04 LTS...
无法将磁盘“C:\Users\bcm\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx” 附加到 WSL2: 系统找不到指定的文件。
Error code: Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_FILE_NOT_FOUND

提示已经安装过,可能是之前的残留文件,直接移除掉。

  1. 查询已经安装的子系统: wsl --list --all
  2. 删除废弃的系统:wsl --unregister Ubuntu-20.04

安装时间稍微较长,可以喝杯水休息一会。

安装gcc

  • 先更新
    sudo apt-get update // 更新软件源
    sudo apt-get install gcc // gcc 环境
    apt install gcc // gcc 命令行

这一步最好在root环境下进行,刚安装的系统没有root密码,可以输入sudo passwd 设置新密码。

安装Go环境

在官网https://go.dev/dl/找到下载的版本。

wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz

解压

tar -C . -zxf go1.22.1.linux-amd64.tar.gz

配置Go环境变量

打开文件vim ~/.bashrc

复制代码
# 路径 这里根据情况而定,我直接下载到home目录。
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
# GO 代码运行目录
export GOPATH=$HOME/code
# 国内镜像代理
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct

刷新变量:source ~/.bashrc

开启CGO

go env -w CGO_ENABLED=1

编译

进入到ubuntu环境,进行编译

env GOOS=linux GOARCH=amd64 CZ_MODE=prod go build -o ygczpro-api_linux_amd642 main.go

Goland 远程访问Wsl 配置