dll, def ファイルから lib ファイルを作成
しかし、フリーのライブラリなどでは、 dll だけまたは dll と def ファイルだけで配布されている場合があります。 こういった場合の lib ファイルの作成方法の紹介です。
def ファイル
def ファイルは共有ライブラリ(dll) を作る際に必要なファイルで、 ライブラリで公開する関数を記述するテキストファイルです。
これを元にどんな関数が公開されているかという情報の入った lib ファイル(バイナリ)が作成されます。
ただし、
__declspec(dllexport)
という記述を関数宣言の前につけておけば、
それから、 lib ファイルを作ることもできるので、必ずしも必要というわけではありません。公開しているライブラリで lib, def の両方ともないというのはあまり見かけませんが、 ない場合は、 dll から def ファイルを作成することができます。
これは dll から公開している関数の名前を取り出して、 それを元に def ファイルを記述します。
dll からの情報の取り出しは 前回、 dll から依存関係を表示するのに使った dumpbin を使用します。
公開されている定義を表示する場合には、 /EXPORTS オプションを指定します。
$ dumpbin.exe /EXPORTS DLL_FILE
$ dumpbin.exe /EXPORTS c:/Windows/System32/mlang.dll : 12 number of names ordinal hint RVA name 113 0 000131A2 ConvertINetMultiByteToUnicode 114 1 0000FAA2 ConvertINetReset 111 2 00013176 ConvertINetString 112 3 0000414B ConvertINetUnicodeToMultiByte 115 4 00001D86 DllCanUnloadNow 116 5 00002071 DllGetClassObject 117 6 0001AD5C GetGlobalFontLinkObject 110 7 0000A613 IsConvertINetStringAvailable 120 8 0001AE39 LcidToRfc1766A 121 9 000038EF LcidToRfc1766W 122 A 0001ADCF Rfc1766ToLcidA 123 B 00003EC4 Rfc1766ToLcidW :
この出力結果の name の列が知りたい関数名でこれを def ファイルの書式 にあわせて記述します。
LIBRARY MLANG EXPORTS ConvertINetMultiByteToUnicode ConvertINetReset ConvertINetString :
lib.exe
def ファイルから lib ファイルを作るには lib.exe を使います。
lib.exe を使う場合も、フルパスで指定するか、PATH を設定しておきます。
lib.exe の使い方は以下のような形式で、 64 bit 用ライブラリの場合は /MACHINE オプションをつけます。
lib [/MACHINE:x64] /def:DEF_FILE
$ lib /def:libfftw3-3.def $ lib /machine:x64 /def:libfftw3l-3.def # 64 bit
- 関連記事
-
- VS のビルドをコマンドラインで実行する
- VS で gcc のようにファイルを指定してビルドする方法
- Windows でライブラリの依存関係を調べる
- dll, def ファイルから lib ファイルを作成
Facebook コメント
コメント