今天编译一个QT工程(QT版本:qt-win-opensource-4.8.4-vs2008),编译成功,但老是运行出错,如下所示:
QT卸了又装,都没用,网上找资料,各种说法有,有说中木马的,路径错的,软件冲突的,都试了一遍,没有。
网上查了N多方法,总结一下,大概有两种:
(一)qtcore4.dll编译生成时除了问题。
参考下边一篇博客,http://www.xjtudll.cn/Exp/62/,下了个dll关联dll查看器,查看结果如下,原来是QTcore4.dll依赖项却少,网上下载了MSVCP90.DLL和MSVCR90.DLL。原来如此。
(二)不同版本dll数据,path设置时产生干涉。(本文作者出现类型即该种问题)
可以参考如下博文:http://www.cnblogs.com/loongfee/archive/2011/11/30/2268701.html
最近在学习Code::Blocks(CB),感觉CB很强大很开放,尤其是它的纯插件式的框架,非常赞。
但是从VS到CB的转型实在是痛苦的,在VS下面没有问题的程序,放到CB中编译就不能通过。。。
另外,要使用CB+MinGW进行开发还需要将开发中用到的开源库都用MinGW编译好,wxWidgets、GDAL、Qt、Ossim……
网上的教程不少,但多是转来转去的,其实就是那一两个版本,说起来都很顺利,按照他们提供的步骤去编译却总是遇到一些奇怪的问题,很不好解决。
好在Qt官方网站提供了MinGW版本,直接安装就行了。这里说说在CB+MinGW环境下使用Qt的方法以及遇到的问题。
这里默认Code::Blocks+MinGW的环境已经配置好。
1、首先在http://qt.nokia.com/downloads/windows-cpp网站上下载Qt的MinGW库(300M+),安装。
相应的VS2008版本可以从http://qt.nokia.com/downloads/windows-cpp-vs2008 下载,比较恶心的是这两个版本的库不能安装在同一个目录下面。所以我就将MinGW版本的库安装在了C:\Qt\4.7.4\MinGW下。
(之前安装过Qt SDK完全版(1.6G),装完5G+,居然不包含MinGW版本的库。。。)
2、然后在“我的电脑→属性→高级系统设置→高级→环境变量”中设置环境变量。
编辑PATH,添加”C:\Qt\4.7.4\MinGW\bin”,添加的位置要靠前一点,不然可能会被排在前面的其他版本的Qt库所覆盖。我就是被这个问题困扰了好几天,在安装完MinGW版本的Qt库后,在Code::Blocks中新建了一个Qt4的工程,然后Build and Run,总是提示“无法定位程序输入点qUnregisterResourceData@@YA_NHPBE00@Z于动态链接库 QtCore4.dll”的错误,虽然知道是dll库的问题,但是始终没查出问题具体出在哪。最后发现时因为之前装过OSGeo4W,其中包含了Qt库,而OSGeo4W\bin目录在PATH中比较靠前,于是后面安装的MinGW版本的Qt库一直处于被忽略的状态。将”C:\Qt\4.7.4\MinGW\bin”放到它前面就OK了。
综上,在大量测试DLL程序是,直接在环境变量里设置path添加dll路径,可能会产生问题。关于DLL如何在VC中调用问题,参见如下博文:
http://www.cnblogs.com/vranger/archive/2013/01/14/2860141.html