結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

Windowsで関数がどのlibファイルに含まれているかを確認する方法

Windowsで他人のライブラリをビルドして使用する場合など、
サンプルソースを動かしてみたら関数が未解決でリンクエラー…どのlibファイルをリンクすりゃいいんだ?
………なんて経験があると思います。今回はこの解消法をご紹介します。

ここではVisual Studioを使っていることを前提とします。

Visual Studioでは、使用するlibをプロジェクトのプロパティ→[リンカー]→[入力]→[追加の依存ファイル]に指定する必要がありますが、サンプルソースの関数がどのlibファイルに含まれているのかわからん!!といった場合は以下の方法を使います。

 

Visual Studioの開発者用コマンドプロンプトを開く

スタートメニューから開いてください。
例)Visual Studio 2017 (Community)の場合では「開発者コマンド プロンプト for VS 2017」という名前でした。

libファイルの内容をダンプする

libファイル群があるフォルダまで移動して、以下のコマンドを実行してダンプします。

link /dump /exports *.lib>liblist.txt

liblist.txtの内容を確認

あとは普通にテキストエディタでliblist.txtをオープンし、使いたい関数名で検索するだけ。liblist.txtの内容はこんな内容になっているはずです。

Dump of file maincore300.lib
File Type: LIBRARY
Exports
ordinal name
          ??abcfunc@@@QAE@ABV01@@Z (public: __thiscall abcfunc())
              :
          ??targetfunc@....

探したい関数がtargetfuncだったとすると、それが含まれるlibファイルはmaincore300.libということになります。