-1

以下はlink1からの抜粋です。

Microsoft は、Visual C++ の 16 ビット コンパイラ バージョンに __export を導入し、コンパイラがエクスポート名を自動的に生成して .lib ファイルに配置できるようにしました。この .lib ファイルは、静的な .lib と同じように使用して DLL とリンクできます。新しいコンパイラ バージョンでは、__declspec(dllexport) キーワードを使用して、データ、関数、クラス、またはクラス メンバ関数を DLL からエクスポートできます。__declspec(dllexport) はエクスポート ディレクティブをオブジェクト ファイルに追加するため、.def ファイルを使用する必要はありません。

上記の段落はある程度理解できますが、よくわかりません。

以下はlink2からの抜粋です。

DLL をビルドするとき、リンカーは .def ファイルを使用して、エクスポート (.exp) ファイルとインポート ライブラリ (.lib) ファイルを作成します。次に、リンカーはエクスポート ファイルを使用して DLL ファイルをビルドします。DLL に暗黙的にリンクする実行可能ファイルは、ビルド時にインポート ライブラリにリンクします。

さて、これは私を混乱させ、以下の質問をさせました:

  1. 簡単に言えば、エクスポートという用語 が実際に何を意味するのか誰か教えてくれませんか? これにより、あるコードから別のコードにオブジェクトにアクセスできるようになっていると思いますが、ちょっと!!

  2. 古いライブラリを使用してプロジェクトをビルドすると、それらの大部分に .def ファイルが表示されます。しかし、最新のコンパイラはオブジェクトを自動的にエクスポートします。.def ファイルが存在すると、古いバージョンの Visual Studio プロジェクトを新しいプロジェクトに変換するときに競合が発生しますか?

  3. .dll の生成後の .lib (いわゆるインポート ファイル) の使用は何ですか。安全に削除できますか?

  4. アーゴッ!! 静的ライブラリ (.lib) とインポート ライブラリ (.lib) の違いは何ですか? 失敗でしょ?それでも !!

  5. Windows固有の現象ですか?そうではないと思います。いわゆるインポート ファイルの Linux 版は何ですか?

まだ明確でない場合は、質問を自由に言い換えてください。

4

1 に答える 1