次の方法で共有


インポート ライブラリとエクスポート ファイルの使用

あるプログラム (実行可能ファイルまたは DLL のいずれか) から、インポート元でもある別のプログラムにエクスポートする場合、または複数のプログラム間で互いにエクスポートおよびインポートが行われる場合、これらのプログラムをリンクするコマンドは循環エクスポートに対応している必要があります。

循環エクスポートがない状況では、別のプログラムからのエクスポートを使用するプログラムをリンクするときには、エクスポート プログラムのインポート ライブラリを指定する必要があります。 エクスポート プログラムをリンクすると、そのエクスポート プログラムのインポート ライブラリが作成されます。 そのため、インポート プログラムの前にエクスポート プログラムをリンクする必要があります。 たとえば、TWO.dll で ONE.dll からインポートする場合、最初に ONE.dll をリンクし、インポート ライブラリ ONE.lib を取得する必要があります。 次に、TWO.dll のリンク時に ONE.lib を指定します。 リンカーによって TWO.dll が作成されるときに、そのインポート ライブラリである TWO.lib も作成されます。 TWO.dll からインポートするプログラムをリンクするときは、TWO.lib を使用します。

ただし、循環エクスポートの状況では、他のプログラムからのインポート ライブラリを使用して、すべての相互依存プログラムをリンクすることはできません。 前に説明した例では、TWO.dll によって ONE.dll へのエクスポートも行う場合、TWO.dll のインポート ライブラリは、ONE.dll がリンクされるときにはまだ存在しません。 循環エクスポートが存在する場合は、LIB を使用して、いずれかのプログラムのインポート ライブラリとエクスポート ファイルを作成する必要があります。

まず、LIB を実行するいずれかのプログラムを選択します。 LIB コマンドで、プログラムのすべてのオブジェクトとライブラリを一覧表示し、/DEF を指定します。 プログラムで .def ファイルまたは /EXPORT の指定を使用する場合は、これらも指定します。

プログラムのインポート ライブラリ (.lib) とエクスポート ファイル (.exp) を作成した後、他のプログラムをリンクするときにインポート ライブラリを使用します。 LINK では、ビルドするエクスポート プログラムごとにインポート ライブラリを作成します。 たとえば、ONE.dll のオブジェクトとエクスポートで LIB を実行する場合は、ONE.lib と ONE.exp を作成します。これで、TWO.dll のリンク時に ONE.lib を使用できるようになります。この手順では、インポート ライブラリ TWO.lib も作成します。

最後に、最初に使用したプログラムをリンクします。 LINK コマンドで、プログラムのオブジェクトとライブラリ、LIB でプログラム用に作成した .exp ファイル、プログラムで使用されるエクスポート用のインポート ライブラリを指定します。 この例を続行するために、ONE.dll の LINK コマンドには、ONE.dll に格納されるオブジェクトとライブラリと共に、ONE.exp と TWO.lib が含まれています。 LINK コマンドで .def ファイルまたは /EXPORT を指定しないでください。エクスポート定義は .exp ファイルに含まれているため、これらは必要ありません。 .exp ファイルを使用してリンクする場合、インポート ライブラリは LINK によって作成されません。これは、.exp ファイルの作成時に作成されたと想定されるためです。

関連項目

インポート ライブラリとエクスポート ファイル