2017-09-10 9 views
0

Windowsで実行するためのLinuxでのC/C++ソースコードのコンパイルに関する記事はすでに読んでいます。私もMinGWでこれを試してみました。異なるプラットフォーム用のLinuxでのC/C++ソースコードのコンパイル

しかし、Windowsで動作するバイナリを作成するためにLinux上でMinGWを使用する必要がある理由はわかりません。 g ++出力をWindows上で実行できないのはなぜですか?また、g ++の出力をLinux上で実行できるようにするには?出力ファイルは、ヘッダ、データなどの異なる構造を持ち、特定のオペレーティングシステムによってのみ解釈されますか?

誰でも私のために明確にすることはできますか?アマチュアだけでなく、オペレーティングシステムに興味があり、その背後にある本当のポイントが何であるかを知りたいと思っている人についても、このことを私に説明していただければ幸いです。

+2

https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats - 各OSファミリには、多かれ少なかれ独自のものがあります。 –

+0

'出力ファイルはヘッダ、データなどの構造が異なり、特定のオペレーティングシステムだけが解釈できるのですか? 'はい。また、利用可能な環境とライブラリはまったく異なっています(例えば、プログラムの起動時などに実行する必要があるものなど) – deviantfan

+0

[x86 Linux vs. Windows?](https://stackoverflow.com)の重複している可能性があります。/questions/19390331/x86-linux-versus-windows) –

答えて

0

Linux用のバイナリをビルドすると、クロスコンパイルすることになります。これは、Linux上でビルドするバイナリと同じ意味です。 WindowsとLinuxマシンは、おそらく同様のハードウェアを持っているかもしれませんが、それらは非常に異なるオペレーティングプラットフォームです。

プラットホームレベルで、prinf("Hello world")のような単純なものを実行すると、プラットフォーム間で何が起こるのですか?つまり、文字がコンソールに表示される方法は異なります。 fork()のようなコールになると、Windowsのプロセス管理で実際には対応していない大きな課題があります。

私は、同じハードウェアであっても、プログラムコードとデータがメモリにロードされる方法さえWindowsとLinuxで異なると考えています。

プラットフォームに合わせて作成されたネイティブのバイナリが別のプラットフォームで実行されると考える特別な理由はありません。 Javaでは、コンパイルされたコードがクロスプラットフォームであるという考えに慣れてきましたが、Javaの.classファイルに含まれるものはネイティブの実行可能コードではありません。プラットフォームレベルで正しいこと。 C/C++では、これを行うためのビルドツールが必要です(プログラマの専門知識も非常によくあります)。

関連する問題