私のプロジェクトは、メインの dll ライブラリにリンクする必要があるいくつかの静的ライブラリを介してビルドされ、結果として 1 つの dll が得られます。
属性を使用__declspec(dllexport)
すると、スタティック ライブラリの指定された関数が dll に表示されなくなり、dll にリンクされていないライブラリがまったく表示されなくなります。
次に、エクスポートされた関数の適切な名前を取得するために各ライブラリを共有として構築し、それらに基づいて .def ファイルを作成しようとしました。.def ファイルを使用すると、結果が得られました。
__declspec(dllexport)
私の場合、平等に.def-file
行動すべきですか?ソースから .def ファイルを生成することは可能ですか? 私は C++ コードを持っているので、API のマングリングとプレゼンス クラスのために自分で .def ファイルを書くことができません。一時的に生成された dll を使用した上記のアプローチは、本番環境では一貫性がありません。
アップデート
私のプロジェクトの構造について詳しく説明したいと思います。このソリューションは、いくつかのプロジェクト (モジュール) で構成されています。
+
|
+-+ static_lib1
| +
| +--+ src
|
+-+ static_lib2
| +
| +--+ src
|
+-+ dynamic_lib (linked with static_lib1 and static_lib2)
+
+--+ src
各サブプロジェクトは、他のサブプロジェクトに弱く依存しています。明確にするために、それらが接続されていないと仮定しましょう。各モジュールには独自のパブリック インターフェイスがあります。すべてのモジュールを単一の動的ライブラリとして保持したいので、アーティファクトは ですdynamic_lib.dll
が、実際には静的ライブラリはリンクされていません。