dll, def ファイルから lib ファイルを作成

Windows で共有ライブラリ(dll) を使うプログラムを作ろうとするとそのライブラリの 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
関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
43位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

05月 | 2017年06月 | 07月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。