轉載請注明出處:http://blog.csdn.net/horkychen
測試程式時會出現找不到指定的庫或庫函數的錯誤,表示某個依賴庫不存在或版本不正确。如果使用的是動态加載的動态庫所依賴的包不存在,如果程式沒有做好異常處理的話,會讓你很難定位到問題。比如GDI+庫。假設一個程式A,調用了動态庫B,而B連結了GDI+,這時運作在Windows 2000上時,系統裡沒有GDI+的庫,會導緻A不斷Crash掉。因為GDI+庫不是一般C的動态庫,一般沒有庫加載的動作,使得排查問題會有很多的障礙。
這時,我們如果利用依賴關系的檢視工具就可以容易判斷出來。在Linux中可以使用ldd指令很容易地獲得依賴包資訊。而在Windows中,就可以使用Dpendency Walker,一個曾經包在Visual Studio 6中的工具。
下面是一個示例。這個程式是使用Cygwin編譯的,在沒有Gygwin的環境下運作不了,因為缺少了依賴的庫。

不得已的時候也可以使用指令行的方式執行。比如下面的指令:
depends -c -f:0 -u:1 -pa:1 -pf:1 -pe:1 -pl:1 -pg:1 -sm:12 -sf:4 -ot:result.txt D:\Project\UnixTools\assert.exe
IDE調試而不斷加入Debug資訊的時候,或許它能幫你一把。
在Linux和Mac OS下系統提供的工具就可以做到。Mac OS 下是Activity Monitor, 在Linux下(Debian)是System Monitor或者如下的指令行:
cat /proc/<pid>/maps (至于細節,可以參考:http://blog.csdn.net/z_man/article/details/3839677)
下面是兩個系統下的截圖:
Activity Monitor in Mac OS
*(輕按兩下選中的程序)
System Monitor in Linux:
*(右擊選中的程序,選擇Maps).
總之,工欲善其事,必先利其器!