1. ホーム
  2. visual-studio

.libファイルを検査するためのツールは?

2023-11-20 16:12:50

質問

ドキュメントが十分でないソフトウェアを評価しています。サンプルプロジェクトをビルドすると、次のようなリンカーエラーが発生します。

error LNK2019: 未解決の外部シンボル

このアプリには lib ファイルがあまりないので、試行錯誤でこの問題を解決することができますが、もっと多くの エレガント な方法があることを知っています。

javaの世界では、私は grep FOO *.jar を実行して jar を探しますが、私は C++ のアナログを探しています。私はVisual Studio 2005でC++のコードを使用して作業しています。

私は、/LIST オプション付きの lib.exe ユーティリティが情報を取得できると考えていますが、今のところ失敗しています。これはただ印刷されるだけです。

マイクロソフト (R) ライブラリ マネージャー バージョン 8.00.50727.762
Copyright (C) Microsoft Corporation.  すべての権利を保有します。

granite50.dll
granite50.dll
granite50.dll
granite50.dll
...

何か提案はありますか?

どのように解決するのですか?

まず最初に、どのタイプのライブラリなのかを知る必要があります。ライブラリには、単に DLL へのリンクを含むもの (つまり、インポート ライブラリ) と、実行イメージの一部となるコード オブジェクト (つまり、静的ライブラリ) があります。出力の様子から、あなたは DLL のインポート ライブラリを探していたようです。

次に、適切なツールを使用したいと思います。Lib.exe は、ライブラリやその他からオブジェクト ファイルを抽出するために使用されます。これは、Java 用の jar ユーティリティとほとんど同じです。Microsoft は、ライブラリから情報をダンプする dumpbin.exe を提供しています。なるほど LarryF がすでに言及していますね。

インポートライブラリについては dumpbin.exe -headers foo.lib を実行し、それを出力ファイルにリダイレクトします。出力には、関連するDLLがエクスポートする各シンボルのスニペットが含まれます。で始まる行を検索してください。 " Symbol name :" . 完全に一致させたい場合は、"シンボル名" の前後に2つのスペースがあることに注意してください。また、出力を findstr を通してシンボルのリストを生成し、それをテキストファイルにリダイレクトすることもできます。

dumpbin.exe -headers foo.lib | findstr /c:"  Symbol name  :" > foo-exports.txt

もう一つの方法は、関連する DLL を depends.exe .