首页| 论坛| 消息

标题:再问QT程序发布时动态库问题
作者:bangqianchen
日期:2009-02-19 09:56
内容:

环境:XP,VS2005 SP3,使用了数据库,Sql2005,目录结构:
release/RubberDB.exe
release/plugins/sqldrivers 下放了QtSql4.dll,QtGui4.dll,QtCore4.dll,qsqlodbc4.dll。
Qt是采用动态编译的。
main函数里面有设置环境变量的代码
QStringList pathList=QApplication::libraryPaths();
pathList.append(QDir::current().absolutePath()+"/plugins");
pathList.append(QApplication::applicationDirPath()+"/plugins");
QApplication::setLibraryPaths(pathList);
本机情况:
在本机上设置管理员的环境变量PATH=E:\QT\4.4.3\Bin(我的QT安装目录)。
如果设置这个PATH,在release目录下直接双击exe文件可以启动。
如果没有这个环境变量,提示无法找到QtSql4.dll库,说明QApplication::setLibraryPaths(pathList)没有起作用,此时使用Dependency工具查看exe关于QT的dll都找不到,它只在exe同级目录下查找,具体情况如贴图所示 。这里把QtSql4.dll,QtGui4.dll,QtCore4.dll,qsqlodbc4.dll复制到于exe同级目录,可以运行没有问题。
其它未装QT的机器上:
编译release在其它机器上无法启动,参考
http://www.examda.com/ncre2/cpp/fudao/20080830/15051863.html里面的方式:
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
  msvcm80d.dll
  msvcp80d.dll
  msvcr80d.dll
  Microsoft.VC80.DebugCRT.manifest
  把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。但是连接数据库出现driver not loaded,连不上 。以前我用VC6的时候,只要在main函数里面加了plugins路径后,就能运行,现在不知道如何解决了,都烦一两天了,想QT静态编译,参照
http://kevdmx.blog.51cto.com/429766/113118里修改qmake.conf里的MD,MDd为MT,MTd时,编译不过:
Generating Code...
link /NOLOGO /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /MANIFEST /MANIFESTFILE:"tmp\obj\release_static\rcc.intermediate.manifest" /OUT:..\..\..\
bin\rcc.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\nmFDC.tmp
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc alread ..

回复 发表
主题 版块