为了账号安全,请及时绑定邮箱和手机立即绑定

交叉编译在OSX上运行吗?

交叉编译在OSX上运行吗?

Go
婷婷同学_ 2021-05-04 13:45:10
我正在尝试在OSX上交叉编译go应用程序,以为Windows和Linux构建二进制文件。我已经阅读了所有可以在网上找到的东西。我发现的最接近的示例已发布(除了有关go-nuts邮件列表的许多未完成的讨论之外):http://solovyov.net/en/2012/03/09/cross-compiling-go/但它不适用于我的安装。我去了1.0.2。由于1.0.2是最近的版本,因此在我看来上述所有示例均不适用于该版本。试图./make.bash --no-clean与ENV vars设置为386 / windows一起使用,它确实可以编译,但是对于我的安装它却可以编译,这darwin/amd64完全忽略了ENV中假设要构建不同编译器的设置。有没有人建议如何做到(如果可以做到的话)?
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

感谢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参数,对希望交叉编译的每个OS和体系结构重复此步骤。

如果您像我一样在用户模式下工作,则需要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 switch指示Go使输出文件类似于c / c ++的旧编译器,因此上面使用的appname.linux可以是任何其他扩展名。


查看完整回答
反对 回复 2021-05-17
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

如果在OS X上使用Homebrew,则有一个更简单的解决方案:

$ brew install go --with-cc-common # Linux, Darwin, and Windows

或者..

$ brew install go --with-cc-all # All the cross-compilers

reinstall如果已经go安装,请使用。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信