7

私はC++のWindowsでプログラムを書いています。このプログラムでは、ユーザーはダイナミックリンクライブラリ(Windows)または共有オブジェクトファイル(Linux)の形式で拡張機能をコンパイルできます。

Windowsでは、このLoadLibrary関数を使用してdllをロードします。Windowsの.soファイルに対して同じことを行うことは可能ですか?その逆も可能です。Linuxに.dllをロードすることはできますか?

4

3 に答える 3

8

簡単な答えは「いいえ」です

これは、ロードではなく、予想されるエントリポイントのようなダイナミックライブラリの内部形式に関するものです。各オペレーティングシステムは、独自の形式をサポートしています。したがって、それは機能しません。

  • DLLはPE実行可能ファイルです(Windowsのexeファイルと同様)
  • .soは通常ELF形式です(Linux / Unix上の最新の実行可能ファイルのように)。

ただし、Linuxでは、Wineを介したPE実行可能ファイルがある程度サポートされており、WineプログラムはDLLを使用できます。しかし、それはおそらくあなたが探しているものではありません。

Windowsでは、cygwinを介したELF形式のサポートもあり、coff形式(ELFより前のUnixで使用されていたもの)をロードできるコンパイラもあります。私はずっと前にこれにDJGPPを使用しました。

于 2010-07-13T02:29:18.623 に答える
4

DLLとSOは基本的に異なる形式であるため、要するに、LinuxではDLLを、WindowsではSOをロードすることはできません。

于 2010-07-13T02:28:50.123 に答える
3

ちなみに、WindowsとLinuxが共有関数呼び出しを処理する方法は大きく異なります(たとえば、変数がスタックに格納される方法)。そのため、.soファイルはWin32プラットフォームでは機能せず、.dllはLinuxでは機能しません。

于 2010-07-13T02:32:15.673 に答える