web-dev-qa-db-ja.com

Ubuntu Linux 64ビットからすべてのプラットフォーム用にソフトウェアをコンパイルするにはどうすればよいですか?

私は自分のWebサイトで利用できるようにするオープンソースソフトウェアをたくさん書いています。次のような関連するすべてのプラットフォーム用にソフトウェアをコンパイルするにはどうすればよいですか。

  • ウィンドウズ
  • OS X
  • Linux 32ビットdeb
  • Linux 64ビットdeb
  • Linux 32ビットRPM
  • Linux 64ビットRPM

私は現在Linux 64ビットボックスしか持っていないので、自分でコンパイルできるのは64ビットのdebとrpmだけです。他のバージョンを提供しているユーザーに依存しています。新しいリリースの直後にすべてのバージョンが利用できるわけではないため、これは理想的ではありません。実際、Windowsバイナリはこの時点でいくつかのバージョンの遅れを取っています。

Edit:私のソフトウェアは QQWing です。 C++で書かれています。すべてのプラットフォームのバイナリを生成できるビルドシステム、または複数のシステムのビルドを実行できる場所が欲しいです。

3

どの専門組織でも、マシンを構築するだけでなく、サポートするすべてのプラットフォームの環境をテストする必要があります。

それが、ほとんどの専門組織がそのような大量のプラットフォームをサポートしない理由です。Windows、Mac、RedHatベースのLinuxなどのいくつかの大きなものを除いて、それぞれがもたらす小さな利益には高すぎます。

そのため、これらすべてのオペレーティングシステム、コンパイラ、およびそれらすべてのコンパイラなどのツールを実行するためのハードウェアを取得する必要があります。または、ハードウェアが十分に機能している場合は、仮想マシンでこれらのすべてのOSを実行することで回避できます。

7
jwenting

ソフトウェア開発の一部は複雑さの管理です。複数の出力ターゲットを指定すると、複雑さが増します。この場合、「もっと簡単な方法が必要」と尋ねるのは、シンプソンズのエピソードのように、女性が「すべての食料品を1つのバッグに入れて、重くしないでください」と尋ねるのと少し似ています。

複雑な場合は、削減しようとするよりも、正しく管理した方がよい場合があります。

1つの解決策は、 Vagrant を使用して、ターゲットプラットフォームごとに仮想マシン仕様を定義することです。これには、OS、コンパイラ、およびその他の必要なツールが含まれます。

次に、Jenkins、TeamCity、Bambooなどのビルドツールを使用して、各プラットフォームのビルドプランを作成します。これらのビルドプランをソースリポジトリにリンクします(これは基本的な [〜#〜] ci [〜#〜] であり、変更が発生したときにすべて実行します。

これで、マルチプラットフォームのサポートだけでなく、両方が機能し、自己文書化するビルドプロセスができました。この方法では、Windows上で構築するために実際のマシンを構成するのに何時間も費やすという問題は発生せず、6か月後にハードドライブが故障すると、すべてが機能する方法を忘れてしなければなりません。やり直す。

2
Dan1701

GCCは、-m32フラグと-m64フラグをそれぞれ使用して、同じマシンで32ビットと64ビットの両方をコンパイルできます( ソース )。もちろん、コードをテストして、32ビットと64ビットの間に導入されたバグがないことを確認する必要もあります。

Wineライブラリを使用して、コードをWindows実行可能ファイルにクロスコンパイルできます。 mingwライブラリは、Windows互換(技術的にはWine互換)バイナリを出力しながら、gccと同様に機能するコンパイラを提供します。 i586-mingw32msvc-gcc -Wall "main.c" -o "Program.exe"のようなコマンドを使用して、プログラムをコンパイルできます( source )。 WineとWindowsの間にはareの違いがあるため、このメソッドの使用には微妙で予期しないバグが存在する可能性があります。ここでも、徹底的なテストが重要です。

Mac用にコンパイルする方法の提案については、 this SO question で回答を確認できます。

免責事項:これらのいずれも本番環境で使用したことがないので、YMMVです。

1
cbojar