【问题解决】无法定位程序输入点~于动态链接库上(The procedure entry point ~ could not be located)

重新着手使用自己笔记本上配的工作环境

在实习中,需要对Qt程序进行打包:

  1. 在Qt creator 中 修改为 release 编译

  2. 进入release 生成的项目目录,新建一个目录,把可执行文件复制进去

  3. 进入新建的目录,在命令行下 执行 windeployqt XXX.exe

  4. 即可在新建的目录中收集该 程序需要的动态/静态 链接库。

  5. debug下,库配置正确,运行正常无问题。

  6. release下,库配置也正确,但是在生成完要运行时,出现问题:

第一反应是tbb.dll的路径配置不正确。于是查看系统设置下环境变量中的path项下是否正确输入了tbb.dll所在路径。查看后发现无误,而且确实应该无误,如果有错误的话那么debug版本的dll也会出现类似的问题。

然后尝试 把path路径下的tbb.dll文件拷贝至项目的可执行文件.exe所在的路径下,重新运行项目,发现运行成功了。

这下更奇怪了。感觉是默认运行的时候调用的tbb.dll文件不是我希望调用的版本。超出能力范围了,需要求助。


<style>
    p {
        color: red;
    }
</style>
<p>1. 在stackoverflow上,找到了一篇对于“无法定位程序输入点”问题有较好描述的帖子
**其中提到,出现这种错误,很大可能是因为,在生成exe时所使用的lib文件的版本,和在运行exe时所调用的dll的版本不一致。**</p>
 

考虑到我在生成exe时使用的lib对应的dll文件确实存在,但没有得到正确的调用,所以必须了解exe文件在运行时寻找和调用dll文件的搜索路径。

2. 通过百度查找到该博文 dll目录查找顺序
文中阐明了可执行文件在运行时寻找和调用dll文件的路径搜索顺序。一般是:
A 可执行文件所在目录;
B 进程当前目录;
C 系统目录,%SystemRoot%/system32
D 16位系统目录;,%SystemRoot%/system
E Windows目录,%SystemRoot%/
F 环境变量PATH中的目录;

果不其然,我在自己电脑的C:\Windows\System32文件夹下发现了另外的dll。。。。不知道啥时候自带的呢,额,替换之或删除之,问题即可解决

我最后的解决方案:由于本地安装了Qt5,并且已经设置系统环境,也装了mingw64,也设置了系统环境,出现的问题是:qt creator 编译器使用Qt5 下的mingw把项目进行了编译,而我在文件目录中直接运行exe文件调用的是mingw64的dll动态链接库,可能是两个库的版本不同导致以上问题的发生。最后我在环境变量中删除mingw64的路径,重新点击exe,运行成功。

3.通过2中的博文,可以看到利用filemon监视工具是个观察搜索路径顺序的不错工具

有空参见 filemon监视工具的使用,今天受限于时间先略过。

4.如下两篇msdn上的资料帮我重新梳理了windows下动态链接库调用方面的知识,在此一并表示感谢

https://msdn.microsoft.com/zh-cn/library/253b8k2c.aspx
https://msdn.microsoft.com/zh-cn/library/7d83bc18.aspx

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值