1

私はほぼ完成した図書館プロジェクトに取り組んでいます。だから私は今それを試運転している。テストプロジェクトの実行に問題はありません。しかし、私がそれを正しく行っているかどうかは完全にはわかりません。主な理由は、何が起こっているのかを正確に理解していないためです(少なくとも完全にはわかりません)。

DLLと静的ライブラリ(.a)の両方をコンパイルしました。私のテストプロジェクトでは、ライブラリのヘッダーを使用し、静的ライブラリに対してリンクしています。コンパイルできます。しかし、実行可能ファイルを実行するには、実行可能ファイルが存在するDLLも必要なようです。

だから私の理解では、静的ライブラリを使用してコンパイルしますが、実行可能ファイルに正確に埋め込まないので、実行時にDLLを探しますか?

私の混乱は、静的ライブラリが通常実行可能ファイルに埋め込まれていることを読んだという事実から来ています。しかし、それはコンパイラオプションでそれを指定した場合にのみ起こりませんか?

私は自分の状況での関係についてかなり混乱しています。誰かがこれを明確にすることができますか?

編集:私はGCCを使用しています。私のIDEとしてのCodelite。

4

1 に答える 1

1

lib はコンパイル時に静的です (実行時に動的にリンクすることはできません)。libが実行可能ファイルに「埋め込まれている」ことは正しいです。より正確には、lib は、exe ファイルをビルドするためにコンパイラが生成した他のオブジェクト ファイルにリンクされます。lib は別の lib にリンクできません。exe または dll のみが lib にリンクできます。

dll は、exe の実行中に exe によって動的にリンクされます。dll は別の exe のようなものですが、そのエントリ関数は「main」ではなく「dllmain」です。dll は、exe と同じように lib でビルドできます。dll は、実行時に他の dll にリンクして、これらの dll の機能とインターフェイスすることもできます。dll へのインターフェイスは、def ファイルによって定義されます。

プロジェクトに dll が必要な理由については、プロジェクトで LoadLibrary の呼び出しを確認することをお勧めします。

于 2012-07-19T19:54:22.200 に答える