【如何查找你的程序缺少了哪些动态库】

找回缺失的动态库

前言

   只要是windows程序开发或使用,有一个经常遇到的问题,那就是在编译环境下运行的好好的程序,到了其它电脑上,就是不能正常运行,这一般都是环境的问题,其中一个主要的原因就是待部署的电脑上缺少必要的dll动态库,本文是我在经历了九九八十一难后总结的,希望能对您有帮助。
   dll动态链接库的原理就不说了,总之通常情况下编译环境会给我们自动准备好程序运行时所需的各种文件,但一方面,我们从别处下载的绿色软件,中可能会有缺少的情况,另一方面如QT开发的程序发布时,windeployqt 工具有时候并不会把所有用到的dll 都找出来,这时候就需要我们自己去找了,我遇到的就是这种情况,下面不多费话直接上主题。

思路

   只靠自己去猜通常是行不通的,我这里只写了本次的解决思路及用到的工具,有更好的东西,欢迎大家回复指出,我也进步一下,hehe,这些工具网上都能下载到,我就不专门放这儿了,有需要的请回复,我单独给您发。

第一步: 找到exe文件直接依赖的dll,从开发电脑中把缺少的文件拷贝到目标电脑中,若能运行,工作结束;
第二步: 根据不能运行的提示,大致判断是哪个功能引起的,针对这个功能所需的动态库,查找它所调用的下一级dll,若不知道,那就只能一个个遍历(上一步查到的每一个dll) 😦 ,直到找出目标电脑上没有的库,并把它拷贝过去。

工具

   趁手的工具是高效工作的前提。

1.everything(文件搜索工具): 这个是基础工具,用它是因为它查询电脑中的文件,比windows资源管理器自带的功能效率要高的得多,输入文件名,回车后,它会自动全电脑搜索,结果也直观,并且可以直接复制文件;
在这里插入图片描述
2. dependency walker(查找exe程序依赖的动态库): 但它显示的非常多,不容易找,不过还好是图形界面的;
在这里插入图片描述
3. 查看动态库依赖的动态库(dumpbin): 这是一个非常好的工具,我最后就是靠它找到了dll依赖的dll,比如这个postgreSQL 的驱动(libpq.dll)依赖了msvcr120.dll,程序编译后在我的电脑上运行正常,但在另一台电脑上怎么都不运行,一直报错,找不到驱动,可驱动文件一个不少,与可执行文件还在同一个目录下呀,在我折腾了一天多后,才想起来这个办法,还请高手们别笑话,要多多指导吆,下面是它的命令行(不带参);
比较常用的参数的:
a、查看dll库中包含哪些函数:dumpbin /exports XXX.dll;
b、查看exe或dll中加载了哪些动态库:dumpbin /imports XXX.exe;
c、查看lib中包含哪些函数:dumpbin /all /rawdata:none XXX.lib;
d、查看obj中包含哪些函数:dumpbin /all /rawdata:none XXX.obj
在这里插入图片描述

在这里插入图片描述

  1. ProcessExplorer(查询正在运行的进程及其依赖的dll): 这个工具和2中的作用类似,但因为是进程是运行的,所以是动态变化的,只能参考,但信息非常多,值得一看;

在这里插入图片描述
好了,若觉得有用,还请鼓励一下吧,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值