Linux上のWindows用にgcc / g ++でコンパイルする方法は?


119

Linuxでfreeglutを使用してC ++(g ++)でいくつかの効果を記述し、それらを

g++ -Wall -lglut part8.cpp -o part8

それで、g ++が必要なすべてを含む静的にコンパイルされたWindows実行可能ファイルを作成できるかどうか疑問に思っていましたか?

私はWindowsを持っていないので、もしLinuxでそれができたら本当に素晴らしいです:)


4
@AndiDog、「無料の最初の線量」、そうです。とにかく、Windowsマシンで自動化されたビルドプロセスをセットアップすることは、Linuxのプロセスが完了して機能している間は不要です。
Pは2010年

WindowsなしでWindowsソフトウェアをどのようにテストしますか?ワインを使用していますか?
el.pescado

7
@ el.pescado、ビルドとテストは完全に異なるタスクです。前者はWindowsは不要です。
Pは

回答:


92

mingw32はLinux用のパッケージとして存在します。Windowsアプリケーションをクロスコンパイルしてリンクすることができます。Code :: Blocksフォーラムにチュートリアルがあります。x86_64-w64-mingw32-gcc-win32たとえば、コマンドがに変わることに注意してください。

たとえば、UbuntuのリポジトリにはMinGWがあります。

$ apt-cache search mingw
[...]
g++-mingw-w64 - GNU C++ compiler for MinGW-w64
gcc-mingw-w64 - GNU C compiler for MinGW-w64
mingw-w64 - Development environment targeting 32- and 64-bit Windows
[...]

3
debianを使用している場合、mingw32はすでにいくつかのプリコンパイル済みライブラリとともに、すでにリポジトリにあります。
liori

1
そうですね、nongnu.org / mingw -cross- envにはクロスコンパイル環境があります。たとえば、freeglutが含まれます。しかし、私はこれを使用していないので、それについて私に尋ねないでください;)
AndiDog

4
mingw32の「32」は、32ビットのバイナリしか生成できないことを意味しますか?64ビットバイナリを生成するためのソリューションはありますか?
bluenote10 2015

1
bluenote10:「x86_64-w64-mingw32-g ++」など、x64用にビルドされるバリアントがあります。ベースの「mingw32」は機能する場合と機能しない場合がありますが、名前でバリアントをインストール/使用するのは簡単です。ar2015:C ++ 11をまったくサポートしていませんか、それともC ++ 11で発生した問題について話していますか?私は話すときにmingwを使用してプロジェクトを構築するよう取り組んでいます。これは知っておくと良い情報です。他のスレッドは、c ++ 11をサポートしていることを示しています(例:stackoverflow.com/questions/16136142/…)。もちろん喜んでお手伝いさせていただきますが、その場合は別の投稿が最適です。
John P

1
このトピックの内容は最近変更されましたか?
モントリオール

30

LinuxでWindows用にコンパイルする1つのオプションは、mingwを使用することです。ここで非常に役立つチュートリアルを見つけました。

Debianベースのシステムにmingw32をインストールするには、次のコマンドを実行します。
sudo apt-get install mingw32

コードをコンパイルするには、次のようなものを使用できます。
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

新しいWindowsアプリケーションをLinuxで直接テストしたい場合があります。そのためにワインを使用できますが、ワインにはバグがある可能性があることを常に念頭に置いておく必要があります。つまり、wine、プログラム、またはその両方にバグがあるかどうかわからない可能性があるため、wineは一般的なテストにのみ使用してください。

wineをインストールするには、次を実行:
sudo apt-get install wine


7
あなたは指定する必要はありませんmingw32-binutilsmingw32-runtime、彼らはの依存関係であるため、mingw32
henje

クール、cppには非常に単純なエラー(void main(){}など...)がありました。Windowsではコンパイルされますが、mingwでは失敗します。修正しました。私も試してみたところi586-mingw32msvc-cpp、コンパイルされるようなものでテキストファイルが生成されましたlol .. g ++の1つが機能しました。
Aquarius Power

2
@henje徹底的に、それらを指定しない場合、アンインストール時にパッケージマネージャーによって自動的に削除できますmingw32(「依存関係」としてマークされています。指定しても、指定されません(「手動」としてマークされます)。
Matthieu 2018年

19

推奨される方法でUbuntu 16.04でエラーが発生しました: E:パッケージmingw32が見つかりません

================================================== =========================

このパッケージをUbuntuにインストールするには、以下を使用してください。

sudo apt-get install mingw-w64

インストール後、次のように使用できます。

x86_64-w64-mingw32-g++

ご注意ください!

64ビットの場合: x86_64-w64-mingw32-g ++

32ビット用: i686-w64-mingw32-g ++


14

パッケージマネージャーからmingw64などのクロスコンパイラーをインストールします。次に、次の方法でコンパイルします。32ビットWindowsまたは64 ビットWindowsのgcc呼び出しi686-w64-mingw32-gccを単に呼び出す代わりにx86_64-w64-mingw32-gcc"--staticターゲットシステムにすべてのライブラリがない場合があるため、このオプションも使用します。

あなたはFortranのように、他の言語をコンパイルしたい場合は、交換する-gcc-gfortran、前のコマンドインチ


7

Linuxでmingwを使用してCでWindows実行可能ファイルを作成しましたが、C ++も同様に機能すると思います。

ELLCCというプロジェクトがあります。これは、clangなどをクロスコンパイラツールチェーンとしてパッケージ化したものです。Windows用のclang(C ++)、binutils、およびGDBをコンパイルするために使用します。ellcc.orgのダウンロードリンクから、いくつかのLinuxホスト用にコンパイル済みのバイナリを入手できます。


1
その回答を投稿してから、もう少し先に進みました。ELLCCというプロジェクトがあります。これは、clangなどをクロスコンパイラツールチェーンとしてパッケージ化したものです。Windows用のclang(C ++)、binutils、およびGDBをコンパイルするために使用します。ellcc.orgのダウンロードリンクから、いくつかのLinuxホスト用にコンパイル済みのバイナリを入手できます。
Richard Pennington

5

From:https : //fedoraproject.org/wiki/MinGW/Tutorial

Fedora 17以降、win32およびwin64ターゲットのバイナリを簡単にビルド(クロスコンパイル)することができます。これは、mingw-w64ツールチェーンを使用して実現されます:http ://mingw-w64.sf.net/ 。このツールチェーンを使用すると、C、C ++、Objective-C、Objective-C ++、およびFortranのプログラミング言語のバイナリを構築できます。

「Windowsクロスコンパイラーを使用するためのヒント」:https : //fedoraproject.org/wiki/MinGW/Tips


3

Fedoraの場合

sudo yum groupinstall -y "MinGW cross-compiler"

1
これらすべてのFedoraユーザーの場合:偉大なチュートリアルがここにあります:fedoraproject.org/wiki/MinGW(間違ってリンクするので、編集)
LemurPwned

まさに探していたもの!sudo dnf groupinstall ...でも動作します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.