目录

1、初步说明

2、在开发的机器上使用dumpbin工具查看dll库的依赖关系

3、将dumpbin.exe从Visual Studio中抠出来

3.1、找到dumpbin.exe文件及其依赖的dll文件

3.2、在cmd中运行dumpbin,提示找不到link.exe文件

3.3、再次运行dumpbin.exe提示找不到mspdb100.dll


最近,有个开发同时为了验证问题,需要将mediaxxx.dll从依赖该库的目标库中临时移除,在目标库中不再调用mediaxxx.dll库的导出接口,不再引入mediaxxx.dll对应的.lib文件,但启动exe主程序时还是报找不到mediaxxx.dll,代码中明明已经将对mediaxxx.dll库的引用都去掉了,为啥还会依赖mediaxxx.dll库呢?于是找到我帮忙分析一下,看一下到底还有哪个模块还依赖mediaxxx.dll库。

1、初步说明

这个可以使用Dependency Walker去查看exe主程序与底层的dll库的依赖关系,但该工具只能查看静态依赖的dll库,对于代码中使用LoadLibrary去动态加载的dll库,是查看不到的。我们的exe程序中确实有部分模块是动态加载的。

其实还有个更好用的工具dumpbin,这个工具是微软Visual Studio(IDE开发环境)自带的工具,位于VS的安装目录中。使用该工具可以查看exe和dll文件的依赖关系,可以查看exe和dll导入接口和导出接口等信息。

2、在开发的机器上使用dumpbin工具查看dll库的依赖关系

如何使用dumpbin工具呢?以Visual Studio 2010为例,可以到Windows开始菜单中找到Microsoft Visual Studio 2010节点,在该节点下找到如下截图中命令行入口:

点击菜单项弹出如下的命令行窗口,会自动切换到d:\Program Files (x86)\Microsoft Visual Studio 10.0\VC路径中,然后可以在该命令行窗口中直接操作dumpbin.exe工具。

可以输入dumpbin /?命令,查看dumpbin.exe支持的命令行参数:

在本问题中我们使用/DEPENDENTS参数,就能查看到目标exe和dll的依赖的库信息。具体可以分别执行如下的命令,将目标路径下的所有dll和exe的依赖关系输出:

dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.dll
dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.exe

其中,/DEPENDENTS表示查看依赖关系。输出的结果如下所示:

直接在命令行中查看结果很不方便,我们可以使用“>”重定向符将输出结果重定向到txt文件中,方便查看搜索。命令如下:

dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.dll > E:\0816-dll.txt
dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.exe > E:\0816-exe.txt

输出到文件中查看就方便了,可以随意的搜索了。到E盘中打开txt文件,直接搜索mediaxxx.dll,就看到了还有哪个库还依赖mediaxxx.dll了,如下所示:

3、将dumpbin.exe从Visual Studio中抠出来

上诉方法只能在安装Visual Studio的机器上使用,但有时我们可能需要在没安装VS的机器上使用,所以决定将dumpbin工具从VS中抠出来,方便大家使用。

3.1、找到dumpbin.exe文件及其依赖的dll文件

启动Everything搜索工具,输入dumpbin.exe,看到如下的多个搜索结果:

Everything搜索工具是Windows平台上的文件搜索工具,可以搜索所有磁盘上的文件,比Windows系统自带的文件搜索要快很多,推荐大家使用。

其中D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin目录,就是VS的安装目录,将这个文件拷贝出来。

然后使用Dependency walker打开dumpbin.exe,看看该exe还依赖哪些库,如下所示:

只依赖Kernel32.dll和msvcr100.dll,Kernel32.dll是系统库,是系统自带的,我们不需要带上该库。msvcr100.dll是C运行时库,是安装VS时会拷贝到系统中的,需要带上的。使用Everything搜索一下msvcr100.dll,拷贝过来就可以了。

3.2、在cmd中运行dumpbin,提示找不到link.exe文件

我是将dumpbin工具的文件放置在C:\Users\Administrator\Desktop\dumpbin-2010目录中,打开cmd窗口,切换到该目录中,然后输入dumpbin /?命令,看看当前拷贝出来的dumpbin.exe能否正常运行。结果运行有问题,如下所示:

提示找不到link.exe。于是到dumpbin.exe所在路径D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin中,找到link.exe文件:

拷贝过来。

3.3、再次运行dumpbin.exe提示找不到mspdb100.dll

将link.exe文件拷贝过来后,再次在cmd窗口中运行dumpbin /?命令,结果还是有问题,如下所示:

提示找不到mspdb100.dll库。于是又用Everything搜索了一下mspdb100.dll:

将mspdb100.dll拷贝过来。然后再次运行就正常,于是输入dumpbin /?命令,就能将dumpbin.exe命令行支持的参数打印出来,如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系相关推荐

  1. gradle 查看依赖类库版本_使用Gradle命令查看项目中库的依赖关系

    在Terminal中,可以通过 gradle 的命令查看项目中所使用库的版本,并且可以更加直观看到库之间的依赖关系.同时它们可以帮助您跟踪并解决与库版本冲突有关的任何问题.Building Andro ...

  2. dumpbin查看lib、dll库中函数

    利用VS工具中的dumpbin.exe可以查看lib.dll中的函数,查了的命令如下: 本电脑安装的VS2017,dumpbin.exe的路径在D:\Program Files (x86)\Micro ...

  3. Linux中函数库文件依赖关系查找网站 www.rpmfind.net

    例如,手动安装光盘里的httpd软件包,会提示需要依赖其他的包,前面几个还可以根据名字用tab键补全,但是最后发现需要安装"libodbc.so.2"函数库文件,看到这个.so结尾 ...

  4. python中wheel什么意思_某个wheel(.whl)包的依赖关系是什么?

    我想安装pylab,我不能直接访问pip(代理限制).我不能通过cntlm或其他代理隧道解决方案.在 所以我有两个解决方案:手动安装每个包,运行它,安装丢失的依赖项并返回(1) 下载控制盘并获取依赖项 ...

  5. 查看依赖树_Python中的依赖关系处理

    对许多人来说,依赖关系是一场噩梦.一些人甚至认为它们是技术债务.管理你的软件的库列表是一种可怕的体验.自动更新依赖项?-这听起来像是在说胡话. 请继续关注我,因为我将帮助你更好地掌握一些你在实践中无法 ...

  6. 从真实项目中抠出来的设计模式——第三篇:责任链模式

    一:现实场景 有时候在开发的过程中,我们经常会根据某个状态的值,写出很多的ifelse逻辑,比如拿项目里面的案例来说,如果当前发送的是彩信,此种状态需要如何给实体赋值,如果是短信,邮件又是其他方式的赋 ...

  7. 从真实项目中抠出来的设计模式——第二篇:过滤器模式

    一:实际场景介绍 我们在给用户做订单催付通知的时候,会有这样的一种场景,用户在系统后台设置一组可以催付的规则,比如说订单金额大于xx元,非黑名单用户,来自 哪个地区,已购买过某个商品,指定某个营销活动 ...

  8. 如何使用OpenCV在图像中抠出指定的颜色区域

    1 简要说明及流程 我们往往需要在图像中抠出指定颜色的区域.在实际工况下这种指定颜色不是简单的纯色,往往难以单一的用R G B的某个范围值去确定. 本文以PhotoShop为基准,在一副彩色图中按照提 ...

  9. Linux 中ifconfig和ip addr命令查看不到ip解决方法

    Linux 中ifconfig和ip addr命令查看不到ip解决方法 参考文章: (1)Linux 中ifconfig和ip addr命令查看不到ip解决方法 (2)https://www.cnbl ...

最新文章

  1. Data Guard搭建困境突围(一)
  2. 利用WPS 2013文字制作精美的信纸的方法
  3. bzoj 1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分)
  4. 人脸识别之一图像采集及人脸库的建立
  5. android看图3D,一个相见恨晚的3D手机看图神器,工作效率飙升10倍!
  6. 自适应盲信号处理的经典
  7. 江苏开票系统安全接入服务器地址,江苏省增值税发票查询平台网址.doc
  8. java 新功能_最新的Java版本101有什么新功能?
  9. 百度2015校园招聘笔试题
  10. 【8086汇编】DOS系统中 edit 文本编辑器详解
  11. 多媒体制作技术心得体会_多媒体技术学习心得体会总结
  12. div上绑定keyDown事件
  13. Xilinx ISERDESE2应用笔记及仿真实操
  14. 重磅!《中国迈向新一代人工智能》全文来了。道翰天琼认知智能平台为您揭秘新一代人工智能-1。
  15. 密码校验:大小写字母、字符、数字组合,最少8位
  16. 解决Fabric报“FAILED to execute End-2-End Scenario“问题
  17. 【中国标准】 DRA音频标准是什么概念?
  18. Scrapy爬取猫眼电影评论
  19. 迷茫之后:Java研发转型售前——选择大于努力!
  20. matlab识别黄色车牌,在网上下载了一个matlab的车牌识别,怎么将识别黄色车牌改成识别蓝色车牌,大神求解...

热门文章

  1. linux查询筛选命令 grep、xargs
  2. SQLMAP简单使用教程
  3. sdk - 软件开发工具包
  4. 【项目实战】Python实现深度神经网络RNN-LSTM分类模型(医学疾病诊断)
  5. Automagic Premium 安卓上的自动化神器
  6. html 超链接之锚点
  7. 大一上学期末课程设计
  8. 求生技能必备:如何从被困水中的车里逃生
  9. 通俗理解faster-rcnn的rpn网络
  10. 在Spring Boot中启用Http2.0