なぜ SO を DLL に変換するのですか?
.so は、Linux のシステムコール規約と glibc リンケージを持つ ELF 形式でマシンコードを保存します。.dll は、Windows API リンケージを持つ Windows PE 形式でマシンコードを保存します。これらは全く異なるオペレーティングシステム向けにコンパイルされているため、再コンパイルせずにコンテナ形式だけを入れ替えても、内部のコードが依然として誤ったシステムを呼び出すため、どちらの OS でもロードできないファイルが生成されます。
SO から DLL への変換方法
MinGW-w64 OPEN-SOURCE
Linux ビルドマシンから x86_64-w64-mingw32-gcc -shared -o lib.dll *.c を使用して、ライブラリのソースコードを Windows 用にクロスコンパイルし、Windows 用の .dll を生成します。
MSVC FREE
Windows 上で Visual Studio または cl.exe を使用し、/DLL リンカーフラグを指定してライブラリのソースコードをコンパイルし、Windows 用の .dll を生成します。
これらの形式について
.soファイルは、LinuxおよびUnixにおける共有オブジェクトライブラリであり、Windowsの.dllに相当するものです。プログラムの実行時に自動的にロードされるため、直接開くことはありません。アプリが «cannot open shared object file»…
.SO の詳細を開く →DLL(Dynamic Link Library)は、プログラムの実行中にロードされるコンパイル済みコードを保持する Windows のライブラリファイルです。ダブルクリックして開くものではありません。アプリが DLL の欠落を報告した場合は、ランダムなサイトからファイルをダウンロードするのではなく、そのアプリを再インストールするか、Microsoft Visual C++…
.DLL の詳細を開く →品質と注意点
.soと.dllはどちらも、それぞれの OS 専用にコンパイルされたネイティブマシンコードを含んでいます。境界は単なるファイル形式ではなく、オペレーティングシステムレベルにあります。- ソースコードがなく、ライブラリがプロプライエタリ(非公開)である場合、
.dllを作成するための法的または実用的なルートは存在しません。 - 多くのオープンソースライブラリは、ビルド済みの Windows 用
.dllファイルをすでに提供しています。再コンパイルを試みる前に、プロジェクトのリリース(releases)ページを確認してください。
よくある質問
コンバーターでバイナリを再パッケージ化するだけではいけないのはなぜですか?
.so 内のコードは、Windows には存在しない Linux カーネルインターフェースを呼び出します。たとえ PE コンテナでラップしたとしても、Windows はそのコードを実行できません。Wine を使って Windows 上で Linux の `.so` を実行できますか?
.dll ファイルを実行できるようにするもので、逆方向の機能です。Windows 上で Linux ELF 共有オブジェクトを実行するのには役立ちません。