检查程序对动态库的依赖

转载请注明出处: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的环境下运行不了,因为缺少了依赖的库。

下载地址:http://dependencywalker.com/

 

不得已的时候也可以使用命令行的方式执行。比如下面的指令:

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信息的时候,或许它能帮你一把。

在程序运用有时需要查看一下当前程序加载了哪些库,推荐Process Explorer。它是一个比较全面的工具。可以快速定位程序,支持单独查看单个进程的CPU及内存占用情况等。

还有一个轻量级的工具可以使用:CurrProcess,来自一家很牛的技术公司:NirSoft

 在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).


总之,工欲善其事,必先利其器!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 你可以使用 Dependency Walker 工具来查看程序依赖的库。以下是使用 Dependency Walker 的步骤: 1. 下载并安装 Dependency Walker 工具。 2. 打开 Dependency Walker,点击 File -> Open,选择需要查看依赖关系的程序。 3. 工具会自动分析程序的依赖关系,并在左侧窗口显示。 4. 可以展开依赖关系树以查看每个依赖项所依赖的库。 5. 可以对每个依赖项双击以查看其详细信息,包括库的路径、导出函数等。 注意,Dependency Walker 只能查看静态依赖关系,即程序编译时就确定的依赖关系。如果程序使用了动态链接库,还需要使用其他工具来查看动态依赖关系。 ### 回答2: 在Windows系统中,我们可以使用多种方法来查看程序依赖的库。以下是几种常见的方法: 1. 使用“任务管理器”:打开“任务管理器”,在“进程”选项卡中找到目标程序的进程,然后右键点击该进程,选择“打开文件位置”。在打开的文件夹中,可以看到程序所依赖动态链接库(DLL)文件。 2. 使用“依赖关系查看器”:依赖关系查看器是Windows中的一个工具,用于查看程序所依赖的库。首先,打开依赖关系查看器,然后选择“文件”菜单中的“打开”,浏览到目标程序的可执行文件,选择并打开它。之后,依赖关系查看器将显示出程序所依赖的所有库。 3. 使用命令行工具:在命令提示符中,可以使用"dumpbin"命令来查看程序的依赖库。首先,打开命令提示符,然后导航到目标程序所在的目录。接下来,执行以下命令:dumpbin /dependents 程序名。这将列出程序所依赖的所有库文件及其路径。 4. 使用第三方工具:还有一些第三方工具可以用来帮助查看程序的依赖库,例如Dependency Walker、PE Explorer等。这些工具通常提供更详细的依赖关系信息,包括库的版本、函数导入等。 通过这些方法,我们可以方便地查看程序所依赖的库,对于解决库缺失或版本不匹配的问题非常有帮助。 ### 回答3: 在Windows系统中,可以通过以下几种方式来查看程序依赖的库。 1. 使用Dependency Walker工具:Dependency Walker是一款常用的依赖分析工具,它可以用来查看程序所依赖动态链接库(DLL),以及它们之间的依赖关系。只需要将要检查的程序拖放到Dependency Walker的窗口中,它会自动展示程序依赖的库文件。 2. 使用Process Explorer工具:Process Explorer是一款高级任务管理器,可以显示系统中所有运行的进程和他们的相关信息。通过打开Process Explorer,找到对应的程序进程,右键点击进程并选择"Properties",然后在“Image”选项卡下的“String”部分可以查看程序所依赖的库文件路径。 3. 使用Powershell命令:在Windows系统中,可以使用Powershell来查看程序依赖的库。打开Powershell窗口,运行以下命令:`Get-Process <程序名称> | Select-Object -ExpandProperty Modules`。替换<程序名称>为要查看的程序的名称,执行命令后,将显示程序所依赖的库文件及其路径。 无论是使用哪种方式查看程序依赖的库,都可以帮助我们了解程序所需要的动态链接库文件。这对于识别和解决程序依赖错误或者缺失的问题是非常有帮助的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值