トップコンテンツプログラム>プログラム歴とか



実行ファイルの依存ライブラリを調べる


作ったプログラムを他の人に公開したい場合。
意識的に、OS インストール後に追加したライブラリを「静的リンク」しておけば問題ないです。
しかし、場合によって使用したライブラリを静的リンクにしたのか, あるいは「動的リンク」したのかがわからなくなる場合もあると思います。
今回は、プログラムを実行する際に必要な依存ライブラリを確認するための方法を紹介します。


Windows

Microsoft Visual C++(Express Edition も含む)をインストールしている場合は、「dumpbin.exe」というツールをコマンドプロンプト上で使えば調べられます。
dumpbin には色々使い方があるのですが、実行ファイルが依存している dll を一覧表示したい時には次のように入力します。

dumpbin /dependents [調べたい実行ファイルの場所(相対パスで指定しても OK)]

ま、これでもいいのですが、「コマンドラインは触りたくない!」だったり「dll が依存している dll まで、階層的に知りたい!」という場合。
そういう場合、オススメのソフトがあります。「Dependency Walker」というものです。
Dependency Walker の使用例
使い方はソフトを起動した後、出てきたウィンドウ内に調べたいファイルをドラッグするだけで OK !
しかも、32bit, 64bit、両方のバージョンが用意されているみたい。
ついでに日本語化パッチを公開しているページのリンクもこちらに貼っておきます。


Mac OS X

実はこの記事を書こうとしたきっかけって、Mac で他人のパソコンで動かすためのプログラムを書こうとした時に、外部のライブラリ(boost)を使っていたせいで色々苦労した経験があってのことなんですよねー。
基本的に Mac OS X だと、なぜか静的リンクができないようになっているみたいで困った。
それはともかく。Mac でオブジェクトファイルの依存ライブラリ(dylib ファイル)を確認する方法の説明です。
方法としては、下のような形式のコマンドをターミナルで入力します。

otool -L [調べたいオブジェクトファイルのパス]

実行結果はこんな感じです。
otool の実行例
これで、オブジェクトファイルが使う依存ライブラリの名前とバージョンが分かります。
また、依存ライブラリのパスを変更したい場合は、「install_name_tool」というコマンドを使います。

install_name_tool -change [ライブラリの古いパス] [ライブラリの新しいパス]

探せば GUI で確認できるソフトもあるのかもしれないけど、軽く探してみた範囲では見つかりませんでした。
後、調べていないから確かなことは言えませんが、Linux にも otool や instal_name_tool コマンドがあるようなので、Mac と同じようなやり方で出来るのかも。