感谢 golang-nuts 的善意和耐心帮助,配方如下:
1)需要为不同的目标平台和架构编译Go编译器。这是从 go 安装中的 src 文件夹完成的。在我的情况下,Go 安装位于/usr/local/go
因此编译您需要发布make
实用程序的编译器。在执行此操作之前,您需要了解一些注意事项。
交叉编译时CGO库存在问题,因此需要禁用CGO库。
编译是通过将位置更改为源目录来完成的,因为编译必须在该文件夹中完成
cd /usr/local/go/src
然后编译 Go 编译器:
sudo GOOS=windows GOARCH=386 CGO_ENABLED=0 ./make.bash --no-clean
您需要通过更改 GOOS 和 GOARCH 参数来对希望交叉编译的每个操作系统和架构重复此步骤。
如果您像我一样在用户模式下工作,则需要 sudo 因为 Go 编译器位于系统目录中。否则,您需要以超级用户身份登录。在 Mac 上,您可能需要启用/配置 SU 访问权限(默认情况下不可用),但如果您已成功安装 Go,您可能已经拥有 root 访问权限。
2) 一旦你构建了所有的交叉编译器,你就可以愉快地使用以下设置来交叉编译你的应用程序,例如:
GOOS=windows GOARCH=386 go build -o appname.exe appname.go
GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o appname.linux appname.go
将 GOOS 和 GOARCH 更改为您希望构建的目标。
如果您遇到 CGO 问题,请在命令行中包含 CGO_ENABLED=0。另请注意,用于 linux 和 mac 的二进制文件没有扩展名,因此您可以添加扩展名以获得不同的文件。-o 开关指示 Go 生成类似于 c/c++ 的旧编译器的输出文件,因此上面使用的 appname.linux 可以是任何其他扩展名。