标题:首先感谢XChinux----不晓得这里有没有,但是我一定要转------关于在windows下部署发布QT程序的总结
作者:senfrans
日期:2008-06-17 22:49
内容:
本文原址链接:http://hi.baidu.com/jzinfo/blog/item/c17c3f6d4ff439fe431694c3.html
以下包括了部分网上收集的,以及qt帮助里的内容(Deploying an Application on Qt/Windows)
部署发布QT程序有两种方法:
第一种,静态编译,可生成单一的可执行文件。
第二种,动态编译,需同时附上需要的dll文件。
一、静态编译
1 编译QT。
要静态编译,首先要求QT是静态编译过的。在QT目录下执行:
configure.exe -static -release
make sub-src
就可以编译出静态库。如果只是用来分发程序,也可以mingw32-make release sub-src只编译一个静态库。
这个过程需要1-2个小时。QT目录会变成1.8G左右。注:mingw32-make和make是一样的。
如果用VC2005平台,在编译Qt的时候,configure.exe -static -platform win32-msvc2005
然后nmake sub-src或者nmake release sub-src完成静态编译。
2 编译程序。
然后到你自己的程序目录下执行:
make clean
qmake -config release
make
这时会得到一个非常大的可执行程序,但也会有一个重要的问题,就是图片文件显示不出来。
按照QT帮助的说法,QT里的jpeg,gif等图片的支持都是以插件的形式存在的,现在我们还没有包含任何插件。
3 加入插件
在main.cpp里:
#include
#include //这个
Q_IMPORT_PLUGIN(qjpeg) //这个
Q_IMPORT_PLUGIN(qgif) //这个
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
…
return app.exec();
}
在.pro里加入:
QTPLUGIN += qjpeg qgif
CONFIG += static
QT的帮助里就做到这里,但我编译程序时出错如下:
release/main.o(.text+0×1c9):main.cpp:
undefined reference to `qt_plugin_instance_qgif()’
undefined reference to `qt_plugin_instance_qjpeg()’
经过长时间研究,发现了解决问题的办法:
4 加入LIBS
在.pro中加入:
LIBS += C:/Qt/4.3.3/plugins/imageformats/libqgif.a
LIBS += C:/Qt/4.3.3/plugins/imageformats/libqjpeg.a
如果QT静态编译正确的话,你应该上面这个目录下看到这两个文件libqgif.a和libqjpeg.a (据说以前的QT版本也可能是.lib或.o文件)
这时已经可以正常编译运行了。但还是需要mingwm10.dll才能运行。
5 解决MinGW的mingwm10.dll依赖问题
在Makefile.release里找到:
LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -static -W ..
#1 [bqlhome 01-08 17:31]
我用的是Vs2008,QT4.3.3
QT4.4.3是用VC2008编译的,
现在用VS2008写的QT程序只能在本机用,别的机器运行提示重新运行安装程序。晕,
你上面说的文件我全都复制过来了。
就连QT的Demo在别的电脑都用不了,(本机正常)
#2 [hanxing30 01-08 20:40]
貌似有一个办法可以解决LS遇到的问题,,
给目标机安装.NET Framework 3.5
#3 [wd007 01-08 21:10]
不错,Windows上没用过,学习一下
#4 [bqlhome 01-09 10:59]
现在搞定,原来VC2008/2005的C++运行库文件没复制进来。
#5 [xjcook 01-09 11:17]
收藏了,下次用到的时候好参考,谢谢楼主