本文研究这样一个问题:使用QT SDK和VS2008开发了一个程序,将这个程序放到另一台“干净”的主机上,如何保证程序正确运行。
本文也适用于QT与VS05/VS03/MINGW等配合开发的情形,举一反三的事情请读者自己去做。
1.QT根目录“bin”文件夹下的相应*.dll文件是需要拷贝到程序所在的目录下的。一般地,QtCore4.dll和QtGui4.dll是必备的,同时根据情况需要,可能需要拷贝更多的DLL到程序所在的目录下。具体拷贝那些文件可以采用:
1>尝试法,在测试的主机上(或去除了QT环境变量的本主机),尝试运行程序,会出现提醒“缺少**.dll文件”,如此迭代,可以逐渐将所需DLL补全
2>查看法,使用dependency walker,查看*.exe文件依赖的所有DLL文件,拷贝之
2.需要将VS2008对应的运行时库拷贝到程序所在的目录。运行时库在VS安装目录下,如“C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT”,将该完整的文件夹“Microsoft.VC90.CRT”拷贝到程序所在的目录。
3.最后,却非常重要的是,如果程序使用了QT插件,如:文字编码、图像读写(PNG/BMP不需要)、粒子系统等,则需要将插件也拷贝到程序所在目录。举例如下:
>>程序使用了中文编码,则需要“QTDIR/plugins/codecs/qcncodecs4.dll”文件,将"codecs/qcncodecs4.dll"(没有plugins)保持目录结构
>>拷贝到程序所在的目录下,然后将之前的“Microsoft.VC90.CRT”文件夹拷贝到“codecs/”文件夹下,这一点非常重要,
>>每多使用一类插件,就需要在相应的叶子文件夹下添加“Microsoft.VC90.CRT”,如假若又使用了图像读写,则需要
>>拷贝“QTDIR/plugins/imageformats”到程序所在目录的“imageformats/”下,并在“imageformats/”下添加“Microsoft.VC90.CRT”
一个示例目录如下:
===============================================
demo.exe
- Microsoft.VC90.CRT/
Microsoft.VC90.CRT.manifest
msvcm90.dll
msvcp90.dll
msvcr90.dll
-codecs
+Microsoft.VC90.CRT/
qcncodecs4.dll
-imageformats
+Microsoft.VC90.CRT/
qgif4.dll
qico4.dll
qjpeg4.dll
qmng4.dll
qsvg4.dll
qtiff4.dll
-Qt
-labs
-particles
qmlparticlesplugin.dll
+Microsoft.VC90.CRT/
QtCore4.dll
QtGui4.dll
QtScript4.dll
QtNetwork4.dll
QtDeclarative4.dll
===================================================
可以考虑使用QApplication::AddLibraryPath()方法添加DLL的加载路径,从而使发布的程序的链接库安排更加合理,
但这已经无关紧要了,是锦上添花的事情。