web-dev-qa-db-ja.com

LinuxサブシステムでGCCを使用してWindowsの実行可能ファイルをコンパイルする方法

Windows 10 Anniversary Updateには、Ubuntu用のLinuxサブシステムが含まれています。 Sudo apt-get install gccでgccをインストールしました。

テスト用にいくつかの簡単なCコードを書きました。

#include <stdio.h>
int main(void){
    printf("Hello\n");
    return 0;
}

gcc -c main.cでコンパイルしましたが、実行(Linuxのみ)main.oが生成されます。 ./main.oを実行すると、Helloと表示されます。

私の質問は、Windowsで実行できるようにmain.cをコンパイルするにはどうすればよいですか?基本的に、LinuxサブシステムでGCCを使用して*.exeファイルを生成するにはどうすればよいですか?

35
Mikhail

Linuxサブシステムは、Linuxコンピューターとして機能します。内部でLinux実行可能ファイルのみを実行でき、デフォルトのgccはLinux実行可能ファイルを作成します。

Windows実行可能ファイルを作成するには、mingwクロスコンパイラをインストールする必要があります。

Sudo apt-get install mingw-w64

次に、以下を使用して32ビットWindows実行可能ファイルを作成できます。

i686-w64-mingw32-gcc -o main32.exe main.c

64ビットWindows実行可能ファイル:

x86_64-w64-mingw32-gcc -o main64.exe main.c

これらのWindows実行可能ファイルはLinuxサブシステム内では機能せず、Linuxサブシステム外でのみ機能することに注意してください。

59
Markus Laire

Linuxでgccを使用してコンパイルすると、PE(Windowsが理解する)ファイルではなくELFファイルが生成されます

Linux内のWindows用のプログラムをコンパイルするには、mingwを使用できます。

6
david