dlopen() (Windows では LoadLibrary()) を使用して共有ライブラリを動的にロードする実行可能ファイルを作成しています。共有ライブラリは、実行可能ファイルのシンボルを使用します。
Windows ではこれが可能です。実行可能ファイルはシンボルをエクスポートできます。declspec(dllexport) と .def ファイルの両方が機能します。リンカーは、.exe を作成するときに .lib ファイル (「インポート ライブラリ」) も作成するため、DLL はその .lib とリンクするだけで済みます。
Linux では、これも可能です。実行可能ファイルをビルドするときに -Wl,-export_dynamic を渡し、そのシンボルをエクスポートします。
Mac OS X では、代わりに... -Wl,-export_dynamic は機能しませんが、-Wl,-exported_symbols_list があり<filename>
ます<filename>
。しかし、共有ライブラリを構築するのはそれほど簡単ではありません。リンカは未解決のシンボルについて文句を言います。
私はハックを試みました:実行可能ファイルの名前を lib <executable>
.dylib に変更し、共有ライブラリをリンクするときに -l を渡し<executable>
ました。しかし、「メインの実行可能ファイルとリンクできません」というエラーが表示されます。
一般的な問題は、Windows と Mac OS X では許可されていないのに対し、Linux 共有ライブラリには未解決のシンボルが含まれる可能性があることです。しかし、Windows には依存関係に対してシンボルを解決するための「インポート ライブラリ」があり、Mac OS X にはないようです...
これは Mac OS X でどのように解決できますか? 「インポート ライブラリ」に相当するものはありますか (.dll の作成時に Windows リンカによって作成されるスタブ ライブラリです。そのため、モジュールが .dll に動的にリンクする必要がある場合は、「インポート ライブラリ」に対してリンクされます)。または他の解決策はありますか?