背景:
之前是使用Mac 开发,最近切换到win11下面。发现使用cgo编译有问题。
下面记载了我的使用方法。
环境:
win11(win10理论一样)
win11 安装了wsl2的环境,并且安装了ubuntu系统。
在win11 上面安装了goland
使用goland 访问wsl 中的ubuntu的环境。相当于在ubuntu下面进行go研发,编译。
环境搭建:
1.进入wsl,cmd等windows的命令行进入wsl子系统。(已经安装了ubuntu系统)
wsl
2. wsl的ubuntu系统内部,下载golang
wget https://golang.google.cn/dl/go1.21.4.linux-amd64.tar.gz
设置golang的环境变量。go_root, go_path 略
eg:放在/home/{user.home}下的某个目录。(便于在goland中可以选择到,如果在d:等盘符下面可能goland中选择不到)
/home/someUser/dev/go_root/go
3.win交叉编译(ubuntu中可以编译 win应用)
wget http://musl.cc/x86_64-w64-mingw32-cross.tgz
4. 编译linux x86
wget http://musl.cc/x86_64-linux-musl-cross.tgz
5.
上述的,3,4 的解压后 的bin目录加入 PATH中。
6. 使用path生效
source ~/.bashrc
7. windows环境 goland IDE
Setting》GO》GO_ROOT
设置GO_ROOT 指向 wsl下面路径:
eg:
\\wsl$\Ubuntu-22.04\home\someUser\dev\go_root\go1.21.4.linux-amd64\go
8。设置GO_PATH 也可以指向 wsl下面的某个目录
9. 代码拉取,在wsl的ubuntu的某个目录eg:someProject
10.goland 打开wsl子系统ubuntu下面的目录。File 》Open
eg:
\\wsl$\Ubuntu-22.04\home\someUser\someProject
好了配置好了,接下来的打开goland的命令行会发现在wsl子系统中的ubuntu命令行。
11.可以使用脚本编译:eg。build.sh
编译win exe文件命令示例 (wsl ubuntu下面执行命令)
#compile win demogo env -w CGO_ENABLED=1go env -w GOOS=windowsgo env -w GOARCH=amd64go env -w CC=x86_64-w64-mingw32-gccgo env -w CXX=x86_64-w64-mingw32-g++go build -x -v -ldflags "-s -w" -o ..build/main.exe main.go
or 采用一行命令方式。
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ GOOS=windows GOARCH=amd64 go build -x -v -ldflags "-s -w" -o ../build/main-win.exe main.go
编译linux 执行文件.
CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build --ldflags "-extldflags -static" -o ../build/main-linux-x86 main.go
参考:
https://golang.google.cn
http://musl.cc