Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 交叉编译Go_Linux_Macos_Ubuntu_Go_Cross Compiling - Fatal编程技术网

Linux 交叉编译Go

Linux 交叉编译Go,linux,macos,ubuntu,go,cross-compiling,Linux,Macos,Ubuntu,Go,Cross Compiling,我正试图在我的macbook上为ubuntu linux x86_64交叉编译Go。我已经按照概述的说明进行了操作,但是当我运行go-linux-amd64 build时,我得到以下消息go build runtime:linux/amd64必须使用make.bash进行引导。对此的任何帮助都将不胜感激。它说您需要做的是为linux-amd64重建库和运行时。您可以这样做: 找到Go安装的根目录(如果不知道它在哪里,运行哪个Go可能会有所帮助-二进制文件通常与其他源代码一起安装) cd进入src

我正试图在我的macbook上为ubuntu linux x86_64交叉编译Go。我已经按照概述的说明进行了操作,但是当我运行
go-linux-amd64 build
时,我得到以下消息
go build runtime:linux/amd64必须使用make.bash进行引导。对此的任何帮助都将不胜感激。

它说您需要做的是为linux-amd64重建库和运行时。您可以这样做:

  • 找到Go安装的根目录(如果不知道它在哪里,运行
    哪个Go
    可能会有所帮助-二进制文件通常与其他源代码一起安装)
  • cd
    进入
    src
    目录
  • 运行
    GOOS=linux-GOARCH=amd64./make.bash--no clean
    (如果
    make.bash
    不可执行,则运行
    GOOS=linux-GOARCH=amd64-bash-make.bash--no clean
    )。这将使用指定的操作系统和体系结构重建库和运行时
  • 完成此操作后,可以使用
    GOOS=linux-GOARCH=amd64-go-build为该体系结构构建一个go包或二进制文件。对于其他体系结构和操作系统,您可以遵循相同的说明

    编辑(2015年8月13日): 从Go 1.5开始,交叉编译要容易得多。因为运行时是用Go编写的,所以不需要设置任何东西就可以进行交叉编译。现在,您可以从一个普通的go安装运行
    GOOS=GOARCH=go build
    ,它就可以工作了

    然而,有一个例外。如果您使用的是cgo,您仍然需要提前设置内容。您需要通过将
    cgo\u ENABLED
    环境变量设置为
    1
    来通知工具您想要启用cgo交叉编译。因此,准确地说:

  • cd
    进入Go安装的
    src
    目录(请参阅上面的说明)
  • 运行
    CGO\u ENABLED=1 GOOS=GOARCH=./make.bash--no clean
  • 运行
    CGO\u ENABLED=1 go build
    来构建您的项目。即使在编译时,也必须指定
    CGO_ENABLED=1

  • 您必须
    cd%goroot%/src/,找到make.bash

    然后执行
    /make.bash


    执行你的命令。试试看

    按照上面的答案,我需要设置
    GOROOT\u BOOTSTRAP
    来重新编译我的GO源代码树:

    GOROOT_BOOTSTRAP=/usr/lib/golang/ CGO_ENABLED=1 GOOS=linux GOARCH=386 ./make.bash --no-clean
    

    (我使用的是Fedora 23,因此GOROOT_引导程序在您的操作系统中可能会有所不同)

    哦,我忘了!您还必须将
    --no clean
    标志添加到
    make.bash
    中,否则它可能会覆盖您的旧安装(如果发生这种情况,无需担心,只需重新运行
    make.bash
    ,这一次使用
    --no clean
    标志即可),而不是使用
    这一标志,我建议
    go-env-GOROOT
    (或者只是
    go-env
    来显示所有内容,但是GOROOT是您想要的)。即使您没有设置GOROOT环境变量(建议您不要设置),这也会告诉您go希望在哪里找到它的工具和东西。