环境: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 already defined in LIBCMT.lib(malloc.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _realloc already defined in LIBCMT.lib(realloc.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already
defined in LIBCMT.lib(typinfo.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAE
AAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
..\..\..\bin\rcc.exe : fatal error LNK1169: one or more multiply defined symbols found
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\link.EXE"' : return code '0x491'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\nmake.EXE"' : return code '0x2'
Stop.
晕了,麻烦大家给点意见!