■Windows PC の場合
Dependency Walker を使用する方法があります。このツールは MEX-ファイルやスタンドアロンアプリケーションが使用している、32-bit または 64-bit Windows の exe, dll, ocx, sys, などのモジュールを検索し、ツリー形式で報告します。
検出されたモジュールはモジュールによりエクスポートされているすべての関数がリストされます。もし、不足しているファイル等があればそれらは強調されて表示されます。
Dependency Walkerは以下の手順で使用することができます。
1. Dependency Walkerをダウンロードします。
2. MATLAB を開き、depends.exe を使用して Dependency Walker を起動します。以下の例では、depends.exe ファイルが "D:\Depends" にあることを想定しています。
!D:\Depends\depends.exe myMexFile (or myApp.exe)
このコマンドでの "myMexFile" または "myApp.exe" は調査する対象の MEX-ファイル やスタンドアロンアプリケーションのファイル名となります。
または、以下のような記述も使用することができます。
!D:\Depends\depends.exe /c /f:1 /of:C:\Temp\SomeUniqueFileName.txt myMexFile %(or myApp.exe)
このコマンドでは、Dependency Walker による調査結果を出力するためのテキストファイルを指定することができます。生成されたテキストファイルによるレポートから、リンクが見つからないライブラリを検出することができます。
さらに、直接ロードされた、依存関係のあるライブラリだけでなく、MATLAB や MATLAB Compiler により生成されたスタンドアロン実行形式ファイルが動作中に動的にロードしたライブラリも検出可能です。静的な解析ツールではこれらのライブラリを検出しません。Dependency Walker をランタイムの Dependency Walker プロファイル (.dwiファイル) を生成するために使用することもできます。
1. Dependency Walker の File > Open を選択し、スタンドアロンアプリケーションの exe ファイルや MEX-ファイルを選択します。
2. View > Full Paths がチェックされていることを確認します。
3. Profile > Start Profiling をクリックします。
4. File > Save As で.dwiファイルに保存します。
■Unix の場合
静的なファイル依存については 'nm' または 'ldd' を使用することができます。
nm はファイル名で指定された各オブジェクトファイルのシンボルをリストします。使用可能なシンボル情報がない場合、nm はそのように表示しますが、エラーの原因までは表示しません。
ldd は実行形式ファイルまたは共有オブジェクトの動的な関連性をリストします。ファイル名が指定されてロードされた共有オブジェクトやパス名がリストされます。
MATLABのコマンドウィンドウでは以下のように実行します。
!nm -u myMexFile > /tmp/SomeUniqueFileName.txt
または
!ldd -U myMexFile > /tmp/SomeUniqueFileName.txt
上記の例では検索している MEX-ファイル "myMexFile" の依存関係が "/tmp/SomeUniqueFileName.txt" に書き込まれます。生成されたテキストファイル内をチェックすることにより、不明なライブラリ等を探すことができます。
上記でも原因がわからない場合の、その他の方法は以下の通りです。
1. 生成した MEX-ファイルまたはスタンドアロンアプリケーションをシンプルにします。
2. MATLAB上でコンパイルを行います。スタンドアロンのサンプルが $MATLAB/extern/examples/compiler にあり、MEX-ファイルのサンプルが MATLAB/extern/examples/mex にあります。$MATLAB はMATLABのインストールフォルダです。これは以下で確認することができます。
3. 上記の例についてて nm または ldd を使用します。