2017-01-17 4 views
-2

私は.goファイルを持っていて、Macからgo buildコマンドを使ってバイナリファイルを作りました。 Windows、Linux、IOSで動作するバイナリファイルをビルドする方法はありますか?すべてのプラットフォームのバイナリファイルに移動

は、私たちはGOOS、GOARCHのparamsを変更することによって、それらのそれぞれのバイナリファイルを構築することができます知っていますが、私はすべてのプラットフォームで実行する必要があり、単一行くのバイナリファイルを持っていると思います。私を助けてください。事前に

おかげ

+3

異なるオペレーティング・システムは、そのアプリケーションバイナリインタフェースの違いを持っ​​て、それは不可能です。 – Elad

+0

マルチプラットフォームのバイナリを一般的に持つことはできません。 goコンパイラなどで作成されているかどうかは関係ありません。 – Christian

+1

まず、相互のバイナリをサポートするようにすべてのオペレーティングシステムを変更するか、universalバイナリ形式をサポートするようにallを変更し、この汎用形式をサポートするGoツールを変更する必要があります。言い換えれば、それは不可能です。 – icza

答えて

1

ませんは、それが(実行は、必ずしも個々のプラットフォームやアーキテクチャに合わせて調整され)、移動または任意の他のプログラミング言語で可能です。

ただし、にはには、クロスコンパイルを行うtoolsがあります。

このpostは(この時点では非常に簡単です)Golangでコンパイルを横断する方法を説明するのに役立ちます。


も異なるアーキテクチャが異なるバイナリが必要な理由を説明するUnixのStackExchangeの質問、https://unix.stackexchange.com/a/298283/177527、あります:

コードは、特定のアーキテクチャ用のマシンコードにコンパイルされているので理由は、あるとマシンコードは、ほとんどのプロセッサフ​​ァミリ(ARMとx86では非常に異なります)では非常に異なります。

バイナリhttps://softwareengineering.stackexchange.com/a/251255が、ここで説明したようにもは、OSに依存します。

バイナリフォーマット:実行可能ファイルは、オペレーティングシステムが正しくすることを可能にする特定のバイナリ形式に準拠する必要がありますロード、初期化、およびプログラムの起動を行います。 Windowsは主にPortable Executable形式を使用し、LinuxはELFを使用します。

システムAPI:プログラムは、実行システム上に存在する必要があるライブラリを使用している可能性があります。プログラムがWindows APIからの関数を使用する場合、それはLinux上では実行できません。 Unixの世界では、中央オペレーティングシステムのAPIがPOSIXに標準化されています。POSIX関数のみを使用するプログラムは、Mac OS XやSolarisなどの任意のUNIXシステム上で実行できます。

+1

もちろん、多数のプログラミング言語を使って*可能です:それらは(Python、Perlなどの)解釈する必要がありますか、 Java、C#など)。もちろん、これは各ターゲットプラットフォーム上でインタープリタ/ランタイムを持つことを必要とし、使用されるライブラリもクロスプラットフォームでなければならず、それ自体問題である。 – kostix

+2

@kostix: "プラットフォーム固有のバイナリ"によって実行/解釈される必要がある場合は、実際には "クロスプラットフォームバイナリ"とは言いません。 – JimB

+0

@JimB、私の思考の訓練は、このようなものでした:OPには、実行可能ファイル形式/ OS ABIが異なることについての低レベルの知識が欠けています。私は答えがちょっと残念だと感じていたので、私はちょっと試してみて、OPのためにこれを少しクリアするように感じました。はい、あなたは技術的に正しいです。私はちょうどその答えが細部にちょっとばかり言いたいことがあります。 ;-) – kostix

関連する問題