私はC++のWindowsでプログラムを書いています。このプログラムでは、ユーザーはダイナミックリンクライブラリ(Windows)または共有オブジェクトファイル(Linux)の形式で拡張機能をコンパイルできます。
Windowsでは、このLoadLibrary
関数を使用してdllをロードします。Windowsの.soファイルに対して同じことを行うことは可能ですか?その逆も可能です。Linuxに.dllをロードすることはできますか?
簡単な答えは「いいえ」です
これは、ロードではなく、予想されるエントリポイントのようなダイナミックライブラリの内部形式に関するものです。各オペレーティングシステムは、独自の形式をサポートしています。したがって、それは機能しません。
ただし、Linuxでは、Wineを介したPE実行可能ファイルがある程度サポートされており、WineプログラムはDLLを使用できます。しかし、それはおそらくあなたが探しているものではありません。
Windowsでは、cygwinを介したELF形式のサポートもあり、coff形式(ELFより前のUnixで使用されていたもの)をロードできるコンパイラもあります。私はずっと前にこれにDJGPPを使用しました。
DLLとSOは基本的に異なる形式であるため、要するに、LinuxではDLLを、WindowsではSOをロードすることはできません。
ちなみに、WindowsとLinuxが共有関数呼び出しを処理する方法は大きく異なります(たとえば、変数がスタックに格納される方法)。そのため、.soファイルはWin32プラットフォームでは機能せず、.dllはLinuxでは機能しません。