2

Linux と Windows の間でクロス コンパイルを行うプロジェクトをいくつか知っています。

Wineプロジェクトは、Linux 内で Windows アプリケーションを実行するのに最適です。

andLinuxは、Windows 内で実行される Linux です。

私の質問は、Windows PE 実行可能形式と完全に互換性のある Linux システムを取得するために、Windows コンパイラ (mingw32、visual studio など) を使用して完全な Linux OS をコンパイルできますか?

4

1 に答える 1

3

wine が示すように、PE フォーマットは実際には互換性の問題ではありません。

PE は、ロード時にプログラムがどのように組み合わされるかを定義するだけです。Windows では、RUNDLL がそれを解釈し、すべてのプログラム セクションをメモリにロードし、すべてのサポート dll をメモリにロードし、関数ポインタをパッチして、プログラムがメモリに常駐する準備ができているようにします。(詳細については、 http://msdn.microsoft.com/en-us/library/ms809762.aspxを参照してください。よく読んでください! )

このすべてを実行するためにカーネル モジュールを作成するのを止めることはほとんどありません。上記のリンク先のページに詳細が記載されているため、それほど難しいことではなく、誰かが既に行っている可能性があります。

本当の問題は、オペレーティング システムの基礎です。Linux が PE をロードできたとしても、ファイル名 (\ または /) の根本的な違い、パーミッション モデルの違い、および Linux には存在しない Windows レジストリに関する問題が発生します。これは、GUI のさまざまなウィンドウ モデルに入る前の話です。

したがって、Windows プログラムを Linux で実行するためのタスクは、プログラム ローダーに関するものではなく、Linux ですべての Windows DLL をエミュレートすることに関するものです。私が理解しているように、これがワインの中心です。

于 2013-07-20T13:20:12.540 に答える