美文网首页
Go 交叉编译

Go 交叉编译

作者: lipeiyan | 来源:发表于2021-10-19 21:33 被阅读0次

    44.Go 交叉编译 - 简书 (jianshu.com)

    Go编译器可以为许多操作系统创建本机可执行二进制文件:Windows,Mac OS X,Linux,Android,iOS和一些鲜为人知的工具,例如plan9,solaris,freebsd,openbsd,netbsd,dragonfly。

    它还为同一操作系统支持多种架构(CPU),例如 它可以生成32位和64位Windows二进制文件或intel,arm,ppc,mips Linux二进制文件。

    更好的是,该工具链支持交叉编译,即您可以在Windows等上创建Linux或Mac二进制文件。

    交叉编译非常容易,但仅适用于纯Go代码。 当程序通过CGO链接C库时,它不起作用,

    交叉编译

    默认情况下,go build生成与运行编译器的系统匹配的二进制文件。 即 如果您在具有Intel 64位CPU的Linux OS上运行它,它将为Linux OS和64位Intel CPU生成可执行文件。

    要使其针对其他操作系统进行编译,请设置GOOS环境变量。

    要使其针对其他体系结构(CPU)进行编译,请设置GOARCH环境变量。

    要查看它们的当前值是什么,请运行go env。

    GOOS的有效值:android,darwin,dragonfly,freebsd,js,linux,netbsd,openbsd,plan9,solaris,windows。

    值darwin代表Mac OS和iOS。 值js代表Web汇编的编译。

    GOARCH的有效值:arm,arm64、386,amd64,ppc64,ppc64le,mpis,mpisle,mps64,mips64le,s390x,wasm。

    值386表示32位Intel兼容CPU,而amd64是64位Intel兼容CPU。 价值wasm适用于Web Assembly。

    并非GOOS和GOARCH的所有组合都有效。 要查看所有可能的组合,请运行go tool dist list。

    从Linux或Mac进行交叉编译的示例:

    这是如何编译例如 对于Linux或Mac上的32位Windows:GOOS = windows GOARCH = 386 go build

    这会将GOOS和GOOARCH临时设置为所需的值,然后运行go build。

    我们还可以使用导出GOOS = windows在shell会话的生存期内设置它们。

    从Windows交叉编译的示例:

    在Windows上,当使用PowerShell并交叉编译到Linux和64位ARM处理器时:
    $Env:GOOS = "linux"
    $Env:GOARCH = "arm64"
    go build
    

    当心$Env:GOOS ="linux"在PowerShell会话期间设置GOOS变量,即它将影响所有将来的go build调用。

    在Mac 或Linux上,交叉编译到Windows和64位AMD处理器时:(待验证)
    go env -w SET GOOS= windows
    go env -w SET GOARCH = amd64
    go build
    

    Cross-compiling with gox

    如果需要交叉编译为所有可能的体系结构,则可以使用 https://github.com/mitchellh/gox.

    相关文章

      网友评论

          本文标题:Go 交叉编译

          本文链接:https://www.haomeiwen.com/subject/dgqzoltx.html