1. ホーム
  2. c++

[解決済み] 静的ライブラリ、静的にリンクされたダイナミックライブラリ、動的にリンクされたダイナミックライブラリの.libファイルの中身は何ですか?

2023-03-15 01:13:30

質問

静的ライブラリ、静的にリンクされたダイナミックライブラリ、動的にリンクされたダイナミックライブラリの.libファイルの中身は何ですか?

動的リンクされたダイナミック ライブラリでは .lib ファイルは必要なく、静的リンクでは .lib ファイルはすべてのメソッドを含む .obj ファイルに過ぎないというのはどういうことでしょうか。これは正しいのでしょうか?

どのように解決するのですか?

静的ライブラリの場合、.lib ファイルにはライブラリのすべてのコードとデータが含まれています。次に、リンカーは必要なビットを識別し、最終的な実行ファイルにそれらを配置します。

動的ライブラリの場合、.lib ファイルには、ライブラリからエクスポートされた関数とデータ要素のリスト、およびそれらがどの DLL から来たかについての情報が含まれています。リンカーが最終的な実行ファイルを構築するとき、ライブラリからの関数またはデータ要素のいずれかが使用されると、リンカーは DLL への参照を追加し (Windows によって自動的にロードされるようにします)、実行ファイルのインポート テーブルにエントリを追加して、関数への呼び出しがその DLL にリダイレクトされるようにします。

ダイナミック ライブラリを使用するために .lib ファイルは必要ありませんが、これがないと DLL からの関数をコード内の通常の関数として扱うことができません。代わりに、手動で LoadLibrary を手動で呼び出して DLL を読み込ませる必要があります (そして FreeLibrary を実行します)、そして GetProcAddress を使って、DLL 内の関数またはデータ項目のアドレスを取得します。そして、返されたアドレスを使用するために、適切な関数へのポインタにキャストする必要があります。