web-dev-qa-db-ja.com

WindowsからLinuxへのクロスコンパイル方法

Go 1.2をWindowsマシンにインストールし、ダミープログラムを作成して、環境変数GOARCHGOOSをそれぞれ「AMD64」と「linux」に設定しました。

go build "コマンド、エラーが表示されます。

go build runtime: linux/AMD64 must be bootstrapped using make.bat

これは何を意味するのでしょうか?

26
Dante

使用する前にすべてのツールを構築する必要があることを示しています。

Windows GOARCHがAMD64の場合、この小さなバッチプログラムを実行することにより、必要なすべてのツールを「ビルド」できます。

set GOARCH=AMD64
set GOOS=linux
go tool dist install -v pkg/runtime
go install -v -a std

それが成功したら、説明したことを実行できるはずです(AMD64ではなく、AMD64を使用してください-大文字と小文字が区別されます)。

Windows GOARCHが386の場合、最初に386ツールをビルドする必要があります。そのためには、mingw gccをダウンロードする必要があります。 user2714852が言ったことをしてください。

ここ https://golang.org/wiki/WindowsCrossCompiling はLinux向けの同様の手順です。おそらく役立つでしょう。

アレックス

37
alex

PowerShell環境変数を使用するには(管理モードは不要)を使用します:
$env:GOOS = "linux"
プログラムをビルドするよりgo build

変更された環境変数は、現在のPowerShellウィンドウにのみ存在します。ウィンドウを再度開くと、すべてがリセットされます。

12
eDdA

私は、WindowsからLinuxをビルドする際にいくつかの大きな問題を抱えていました。結局のところ、それはかなり簡単でした。私はアレックスの投稿にコメントしますが、私はstackoverflowの初心者なのでできません。

アレックスが言ったように、 環境変数 を設定します。これは管理者として実行する必要があります(たとえば、「コマンドプロンプト」または「Powershell」ショートカットを右クリックし、「管理者として実行」をクリックします)

set GOARCH=AMD64
set GOOS=linux

管理者として実行しないと、変数は有効にならず、現在使用しているOSとアーキテクチャ用に変数を作成するだけです。

Go envを実行してgo環境変数をチェックすると、現在のgo環境変数のリストが表示されるので、常に良いことがわかりました

go env
set GOARCH=AMD64
set GOBIN=
set GOEXE=
set GOHOSTARCH=AMD64
set GOHOSTOS=windows
set GOOS=linux
set GOPATH=T:\Projects\gopath
set GORACE=
set GOROOT=C:\Go
set GOTOOLDIR=C:\Go\pkg\tool\windows_AMD64
set GCCGO=gccgo
set CC=gcc
set GOGCCFLAGS=-fPIC -m64 -fmessage-length=0
set CXX=g++
set CGO_ENABLED=0
set PKG_CONFIG=pkg-config
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2

GOOS&GOARCHが前に指定した値に設定されていることを確認してください。

それで十分であれば、goコードを含むディレクトリに移動し、コマンドラインから次のコマンドを実行できます。

go build

環境変数に設定されているシステムとアーキテクチャのパッケージを構築します。
これをようやく理解した後、他の問題に遭遇しましたが、それはこの問題に関係のない別の問題です。

11
David O

Goをクロスコンパイルするには、ソースコードからGoをビルドできる必要があります。そのためには、MinGWをインストールしてgccやその他のツールを入手する必要があるようです。それに関するヘルプは https://code.google.com/p/go-wiki/wiki/WindowsBuild にあります。

そこから、Linuxクロスコンパイルのような場合の方法を次に示します。

最初にcdgo\srcディレクトリに追加します。どこにあるかわからない場合は、go envと入力すると、出力にGOROOT="\some\dir\"のような行が表示されます。 cd \some\dir\src\するだけです

次に、GOOS=linuxGOARCH=AMD64を設定して、.\make.batと入力します。これにより、Linuxを対象としたGoコンパイラーなどのバージョンが構築されます。その後、このエラーはもう発生しないはずです。

1
twotwotwo