Windows10にGO1.7をインストールしました。テストプログラムを作成しましたが、Windowsで完全に機能します。次のステップは、Ubuntuを使用してDocker仮想マシンで実行してみることです。
私は見つけました ここ それを行う方法についてのいくつかの情報
set GOARCH=AMD64
set GOOS=linux
go tool dist install -v pkg/runtime
go install -v -a std
Cmdで1行目と2行目を実行しましたが、問題はありません。 3行目でエラーが発生しました
go tool dist: open C:\Go\src\pkg\runtime: The system cannot find the path specified.
このフォルダを手動でチェックすると、Windows専用のランタイムがあります
問題は、Linux用にどこでどのようにダウンロードできるかです。または多分私がやっているのは完全に間違った方法です...
更新2017年9月2日
提案されたように走った
set GOARCH=AMD64
set GOOS=linux
go build -o "myapp"
このファイルを共有フォルダーにコピーした後、そこのフォームを別の共有されていないフォルダーにコピーして(説明されている問題を回避するために ここ )、実行しました
root@7dd1655ae5db:/__notshared# ./myapp
bash: ./myapp: cannot execute binary file: Exec format error
ファイルパッケージをダウンロードした後、ファイルをチェックしました
root@7dd1655ae5db:/__notshared# file myapp
myapp: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
ビルド中にLinux実行可能ファイルが作成されなかったようです。
私は問題とその解決策を見つけました。
私のWindows10では、これらのコマンド
set GOARCH=AMD64
set GOOS=linux
cmdとpowershellコンソールでも実際には何もしませんでした!それが機能する唯一の方法は、コントロールパネル->システム->システムの詳細設定->環境変数を開き、そこに手動で追加する必要があるということです。
開発にVisualStudio Codeを使用する場合は、再起動することを忘れないでください。
2017年2月24日更新
代わりに、上記のすべてで、このようにWindowsPowerShellで変数を設定できます
$ env:GOOS = "linux"
それをコンソールに読んでください
$ env:GOOS
その他の質問は少し古いです(2013年から)。
クロスプラットフォームのサポートは大きく進化しました。必要なのは、環境変数(GOARCH
とGOOS
)を変更し、go build
を実行することだけです。
main
パッケージのフォルダーに移動し、次の手順を実行します。
set GOARCH=AMD64
set GOOS=linux
go build
結果のバイナリの名前は次のように変更できます。
go build -o "myapp"
LinuxでWindowsAMD64用にアプリをコンパイルするには、1つのコマンドで十分であることに注意してください(main
パッケージのフォルダー内)。
GOOS=windows GOARCH=AMD64 go build
これはブログ投稿でも確認されています: Dave Cheney:Go 1.5とのクロスコンパイル :
Go 1.5を使用してGoプログラムをクロスコンパイルするには、プロセスは次のとおりです。
GOOS
とGOARCH
をターゲットの値に設定します オペレーティングシステムとアーキテクチャ 。
go build -v YOURPACKAGE
を実行します
GOPATH
にパッケージをコンパイルしてインストールするため、go install
を実行する必要はなく、実行しないでください。これは、多くの場合、望ましくありません。クロスコンパイルを行うことは、アプリとパッケージを開発/テストするためのものではありません。別のシステム/コンピューターで実行する単一のバイナリーを作成することです。
go build
は何もインストールせず、実行可能バイナリを生成するだけです。詳細については、 ビルドビルドとは何ですか? を参照してください。
ブログ投稿でも確認されています: Dave Cheney:Go 1.5とのクロスコンパイル :
クロスコンパイルするときは、
go build
ではなくgo install
を使用する必要があります。これは、go build
がgo install
よりも望ましい数少ないケースの1つです。この理由は、
go install
は、コンパイルされたパッケージ.a
ファイルを、ソースコードのルートと一致するpkg/
ディレクトリに常にキャッシュするためです。
Go1.14を搭載したWindows10で私がうまくいったのは、次のとおりです。
go env -w GOARCH=AMD64
go env -w GOOS=linux
go build -o test-linux test.go
それでおしまい。
これをWindowsコマンドプロンプトとWindowsPowerShellの両方で試しました。結果に違いはありません。
バイナリファイルをテキストエディタで開くと、MZ(Windows)ではなくELF(Linux)で始まることがわかります。
指定されたアーキテクチャのLinuxマシン(RHEL 7.3)で実行したところ、正しく機能しました。それは正しい出力を与えました。
ファイルをLinuxマシンにコピーした後、実行可能にする必要がありました。
$ chmod +x test-linux
それから私はそれを実行することができました:
$ ./test-linux
Linuxで次のコマンドを実行して、ファイルの詳細を取得することもできます。
$ file test-linux
test-linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
もちろん、アーキテクチャがすでにAMD64
である場合は、再度設定する必要はありません。 GOOS
を設定するだけです。
クロスコンパイルが終了したら、GOOS
をwindows
に戻すこともできます。 WindowsコマンドのプロンプトとPowerShellを閉じ、go env
を実行してGo環境変数のリストを表示すると、GOOS
はlinux
の値を保持していました。 Windowsを再起動しようとしませんでした。したがって、Windows用に再度コンパイルする場合は次のようにします。
go env -w GOOS=windows
ここに示すように、正しいケーシングを使用する必要があります。たとえば、Windows
またはLinux
は機能しません。