web-dev-qa-db-ja.com

WindowsでLinux実行可能ファイルを実行するにはどうすればよいですか?

Linuxで C++ プログラムをコンパイルしました。

make -f mymakefile

これにより、実行可能ファイルa.outが生成されます。この実行可能ファイルは、Windowsコマンドプロンプトでは実行できないようです。

5
Terry Qiao

LinuxのプログラムをWindowsでネイティブに実行することはできません。それらは完全に異なるオペレーティングシステムです。

ただし、プログラムを実行する方法はいくつかあります。

  1. Windowsでプログラムを再コンパイルして native 実行可能ファイルを取得します
  2. LinuxのWindowsサブシステム をインストールし、その環境でプログラムを実行します
  3. Linuxを 仮想マシン にインストールし、その環境でプログラムを実行します
  4. Cygwin または MinGW をインストールし、その環境で再コンパイルして実行します
  5. クロスコンパイラ を使用します

確かに、プログラムの性質とその依存関係によっては、追加のソフトウェアや ソースコード への変更を加えない限り、別の環境で実行できない場合があります。

94
Keltari

Windows(WSL)用のLinuxサブシステムとLinuxディストリビューションが必要です。 Windowsストアには、WSLがあらかじめパッケージ化されたLinuxディストリビューションがいくつかあります。 Ubuntuはかなり人気がありますが、すでにLinuxシステムが構築されているため、a.out、それを一致させるのが最も簡単かもしれません。

Linuxディストリビューションと一致しない場合、およびa.outはそのままでは機能しません。WSLディストリビューションでmakeを再実行することもできます。

26
MSalters

上記の回答はほとんどの側面をカバーしていましたが、偶然にも提案された flinux (外部Linuxと呼ばれることもあります)に遭遇したかどうかはわかりません here より簡単かもしれません達成しようとしていることに応じた回避策。

(私はWSLを持っていて、エミュレーターとVMでたくさん働いています、そして私は実際にはエクスプローラーの他の回避策を持っていません:))

外部LINUXは、動的バイナリトランスレータであり、Windowsプラットフォーム用のLinuxシステムコールインターフェイスエミュレータです。ドライバーやシステムに変更を加えることなく、変更されていないLinuxバイナリをWindowsで実行できます。これは、Cygwinや他のツールとは対照的に、WindowsでLinuxアプリケーションを実行する別の方法を提供します。現在、多数のコンソールアプリケーションと一部のGUIアプリケーションが実行されています。

7
xavier_fakerat

Linux上のWindows用にクロスコンパイルできます。

https://stackoverflow.com/questions/2033997/how-to-compile-for-windows-on-linux-with-gcc-g を参照してください

これにより、Linuxを使用して、Windowsで実行されるバイナリ実行可能プログラムをコンパイルできます。

5
RedGrittyBrick

仮想マシンの実行に似ているが、まったく同じではない別のオプションは、Dockerコンテナーからアプリケーションを実行することです。

はい、Docker for WindowsはVM=バックグラウンド(HyperV上のMobyLinuxVM))を使用しますが、次のようなことができます:

$ docker run a.out

コンテナを自動的に停止します。また、使用するリソースも少なくなり、出力はcmdやPowerShellなどのWindows独自の端末から読み取ることができます。

この状況のdockerfileは次のようになります。

FROM docker pull ubuntu:latest

RUN make -f mymakefile

私は個人的にこれがWindowsでLinuxアプリケーションを実行するための最も良い解決策だと思います

2
Thomas

この特定のケースでは、私はmingwを使用してWindows 8にgccをインストールしていました。

次に、mingwフォルダーのパスをシステムパスに追加します(コントロールパネル/システム/高度なシステム設定から)。

次に、Linuxと同じようにコマンドプロンプトでgccを実行します。

0
Amin Vakil