我的项目当中使用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 20
和 gcc 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
提示已经安装过,可能是之前的残留文件,直接移除掉。
- 查询已经安装的子系统:
wsl --list --all
- 删除废弃的系统: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