簡體   English   中英

交叉編譯Go

[英]Cross Compiling Go

我想在我的macbook上交叉編譯Go for ubuntu linux x86_64。 我按照這里列出的說明進行操作但是當我運行go-linux-amd64 build我得到以下消息go build runtime: linux/amd64 must be bootstrapped using make.bash 任何幫助都將不勝感激。

你需要做的是重建linux-amd64的庫和運行時。 你可以這樣做:

  1. 找到你的Go安裝的根目錄(如果你不知道它在哪里,運行which go可能會有所幫助 - 二進制文件通常與其他源安裝)。
  2. cd進入src目錄
  3. 運行GOOS=linux GOARCH=amd64 ./make.bash --no-clean (或GOOS=linux GOARCH=amd64 bash make.bash --no-clean如果make.bash不可執行)。 這將使用指定的操作系統和體系結構重建庫和運行時。

完成此操作后,您可以使用GOOS=linux GOARCH=amd64 go build為此體系結構構建一個go包或二進制文件。 您可以按照其他體系結構和操作系統的相同說明進行操作。

編輯(08/13/15):

作為圍棋1.5,交叉編譯容易得多 由於運行時是用Go編寫的,因此無需進行任何設置即可進行交叉編譯。 你現在可以從vanilla Go安裝運行GOOS=<os> GOARCH=<arch> go build ,它會起作用。

但是,有一個例外。 如果您正在使用cgo,您仍需要提前設置內容。 並且您需要通過將CGO_ENABLED環境變量設置為1來通知工具您要啟用cgo交叉編譯。 所以,准確地說:

  1. cd進入Go安裝的src目錄(參見上面的說明)。
  2. 運行CGO_ENABLED=1 GOOS=<os> GOARCH=<arch> ./make.bash --no-clean
  3. 運行CGO_ENABLED=1 go build以構建項目。 即使在編譯時,指定CGO_ENABLED=1也很重要。

按照上面的回答https://stackoverflow.com/a/27413148/3675575 ,我需要設置GOROOT_BOOTSTRAP來重新編譯我的GO源代碼樹:

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

(我使用的是Fedora 23,因此操作系統中的GOROOT_BOOTSTRAP可能會有所不同)

你必須cd %goroot%/src/,find make.bash

然后執行./make.bash

執行你的命令。 試試吧!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM