4

Linux で他のプラットフォームのバイナリを作成することはできますか? gcc を使用して.oファイルにコンパイルできるプログラムがあるとしますが、それを使用しexeて Windows で実行できる出力を使用できますか?

4

7 に答える 7

7

短いバージョン: はい、できます。これはクロスコンパイルと呼ばれ、このキーワードを使用して Google で検索すると、適切な結果が得られます。

現在の現実: 比較的小さな C/C++ コードを両方のプラットフォームで実行するには、かなりの労力が必要です。API、ユーザー インターフェイス、呼び出し規約、アライメントなどの違いは、よくあることです。幸いなことに、役立つクロスプラットフォーム ツールがたくさんあります。クロスプラットフォームのユーザー インターフェース ライブラリであるGoogle for Qt 。または、いつでもどこでもBoostを使用してください。プラットフォームごとに個別のコード行を指定するには、おそらく多数の#ifdef __WINDOWS__or (これらのステートメントは正しくない可能性があります) を追加する必要があります。#ifdef __UNIX__

したがって、両方のプラットフォーム用にコーディングすることは安全ではなく、作成しているソフトウェアの複雑さに応じて、オペレーティング システム全般、特に両方の OS についての深い知識が必要です。

つまり、.o から .exe を作成するツールはありません。

幸運を!

〜ロブ

于 2009-11-06T15:28:48.177 に答える
1

はい。ターゲット プラットフォームのクロス コンパイラを探します。

これは、ARM プロセッサやその他の組み込みプラットフォーム向けのモバイル アプリケーションを開発する方法です。例: symbian アプリケーションを作成する場合、開発中に Windows シミュレーターで実行できますが、展開する場合は、ARM クロスコンパイラーを使用してプロジェクトをコンパイルする必要があります。これは、ほとんどすべての電話が ARM プロセッサで実行されるためです。

于 2009-11-06T15:16:26.043 に答える
1

もちろん。Windows バイナリを生成できるコンパイラがあれば、コンパイラがどのシステムで実行されているかは問題ではありません。

Unix 中心のオープン ソース プロジェクト用の Windows バイナリの多くは、誰も Windows を実行していない状態で作成されています。たとえば、 Rake-Compilerは、MRI および YARV Ruby 実装のバイナリ拡張を構築するためのプロジェクトです。Rake-Compiler の主な目的の 1 つは、拡張機能の作成者が Linux または OSX から Windows 用の拡張機能を公開できるようにすることです。

于 2009-11-06T16:07:14.823 に答える
0

GUIが必要な場合は、kdevelopとQtを試してください。この方法で、Linuxホスト上にWindowsGUIやコンソールプログラムを「確実に」構築できます。

「ツールチェーン」や「クロスコンパイル」をグーグルで試すこともできます。ルーター用のソフトウェアをビルドするために上記を実行します(これは「他の」プラットフォームですが、Windowsではありません)。基本的に、コンパイルは別の方法を使用して実行されます。ターゲットOS用にコンパイルするコンパイラ

于 2009-11-06T16:40:58.153 に答える
0

「Linux クロス コンパイル ウィンドウ」の Google。最初のリンクはかなり良さそうです。

于 2009-11-06T15:12:51.470 に答える
0

私はそのようなツールを知りませんが、基本的に、それを不可能にする理由は見当たりません。

たとえば、Linux には、Linux API 関数ではなく Win32 API 関数 (アドレスを知ることによって) にマッピングすることで C++ コードをコンパイルできるツールが存在する可能性があります。

于 2009-11-06T15:16:34.817 に答える
0

私のアイデアはどちらもあなたの質問に直接答えませんが、検討する価値はあります.

別のマシン (物理または仮想) で Windows を実行することもオプションです。完全な Windows 環境があれば、Windows バージョンのデバッグとテストがはるかに簡単になります。

もちろん、Java またはインタープリター言語 (つまり、python) を使用して、プラットフォーム固有のコードを最小限に抑えようとすることもできます。

于 2009-11-06T15:33:25.080 に答える