• 16304阅读
  • 10回复

QT编译后release下无法执行,找不到dll输入点 [复制链接]

上一主题 下一主题
离线秀才太守
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-07
QT编译后release下无法执行,找不到dll输入点

我的应用程序在debug下编译后可以正常执行,可是编译到release下 打开 .exe文件时,就出错:
***************************************************

无法定位程序输入点_Z5qFreePv于动态链接库QtCore4.dll上

*************************************************** 

我配置为:windowsXP + Qt-sdk-win-opensource-2009.03

之前没有安装任何Qt的程序,环境变量设置是按照bin目录下设置的,如下所示:

  1. set QTDIR=D:\study\program\qt\qt
  2. set PATH=D:\study\program\qt\qt\bin
  3. set PATH=%PATH%;D:\study\program\qt\bin;D:\study\program\qt\mingw\bin
  4. set PATH=%PATH%;%SystemRoot%\System32
  5. set QMAKESPEC=win32-g++

请问下这个是什么原因啊?
离线qindq

只看该作者 1楼 发表于: 2009-07-07
两种原因:
1.找不到QtCore4.dll
      设置PATH环境变量,或者把QtCore4.dll,QtGui4.dll拷贝到应用程序目录

2.QtCore4.dll编译的编译工具与应用程序的编译工具不一致
离线dbzhang800

只看该作者 2楼 发表于: 2009-07-08
set PATH=%PATH%;D:\study\program\qt\bin;D:\study\program\qt\mingw\bin

如果把中间的 D:\study\program\qt\bin 去掉行不行呢?
离线qlovet
只看该作者 3楼 发表于: 2009-07-11
同意 1 楼的办法,但 除了 QtCore4.dll,QtGui4.dll 外, 还需要mingwm10.dll
离线wd007

只看该作者 4楼 发表于: 2009-07-11
看样子你是采用动态链接了,把Qt运行库,还有mingwm10.dll与你的可执行文件一同发布。

如果有插件,也要发布在正确的路径下。

还有一个大前提是你要采用共享库也就是动态链接方式安装Qt,当然这是默认的。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线khb_gl
只看该作者 5楼 发表于: 2009-07-15
我也出现了这个问题.

原因很有可能是你环境变量中的系统变量PATH设置问题.

我开始安装QT没有出现这个问题,用了一段时间就出现罗.

觉得是 QtCore4.dll 链接错误,意思是说 release下的可执行程序链接的QtCore4.dll不是QT安装目录下的/bin中的QtCore4.dll.

后来一查找,发现最近安装的CTEX软件中也有QtCore4.dll,找到原因了.

所以,把qt下的库路径添加到我CTEX库路径之前,就解决问题啦.
离线318065268
只看该作者 6楼 发表于: 2009-09-21
这个问题也困扰了我一段时间,但现在基本上解决了。

本质来讲,是因为程序运行的时候链接到的是D:\study\program\qt\bin 里面的dll,而Qt编译的时候使用的实际上是D:\study\program\qt\qt\bin里面的dll。两种dll虽然名称一样,但是大小不同,内容肯定也有所区别。

所以要解决这个问题,最根本的就是要让我们在运行这个程序的时候首先加载到../qt/qt/bin里面的dll。虽然我们设置好了环境变量,但可能这些路径的顺序不同,比如,可能../qt/bin的路径在../qt/qt/bin路径之前,那么系统自然使用的是../qt/bin中的dll了,所以要确定系统最先搜索的是../qt/qt/bin目录。
此外,还可以把../qt/qt/bin目录下对应的库拷贝到当前目录下,也可以直接运行。因为程序会在搜索环境变量之前最先搜索当前目录下是否有对应的库。
注:感谢之前的网友,我的问题得以解决,也能够在此写下心得。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线计划

只看该作者 7楼 发表于: 2009-09-23
这个问题我一直没有找到答案,每次运行的时候总是把QtCore4.dll,QtGui4.dll拷贝到同一目录下,很麻烦。
现在去试试,希望能解决。谢谢大家。
好好学习,天天向上。
离线qcbb001
只看该作者 8楼 发表于: 2010-03-24
引用第6楼318065268于2009-09-21 17:08发表的  :
这个问题也困扰了我一段时间,但现在基本上解决了。
本质来讲,是因为程序运行的时候链接到的是D:studyprogramqtbin 里面的dll,而Qt编译的时候使用的实际上是D:studyprogramqtqtbin里面的dll。两种dll虽然名称一样,但是大小不同,内容肯定也有所区别。
所以要解决这个问题,最根本的就是要让我们在运行这个程序的时候首先加载到../qt/qt/bin里面的dll。虽然我们设置好了环境变量,但可能这些路径的顺序不同,比如,可能../qt/bin的路径在../qt/qt/bin路径之前,那么系统自然使用的是../qt/bin中的dll了,所以要确定系统最先搜索的是../qt/qt/bin目录。
.......




非常感谢318065268! 按着所说的,将环境变量PATH中 ../qt/qt/bin放置../qt/bin之前,问题解决!
QQ:23166010
离线nmiirq

只看该作者 9楼 发表于: 2010-03-27
呵呵,当你的机子中有两个版本的QT时,这样的问题就经常出现了,我被折麿了好几回了。
离线331703405
只看该作者 10楼 发表于: 2010-03-29
顶 6楼
快速回复
限100 字节
 
上一个 下一个