qt静态编译,安装QT和静态编译QT

静态编译QT,自己搞了一天才成功。晕死。
下面先安装,和做个例子,用于对比 动态连接 和 静态连接。
安装QT
在windows下安装QT比较简单,只要安装QT库和vs2008插件即可:
qt-win-opensource-4.7.3-vs2008.exe
qt-vs-addin-1.1.9.exe

一个简单的QT程序

用vs2008新建一个工程,选择Qt4 Projects->Qt Application,如下图:
安装QT和静态编译QTqt静态编译
点击OK后,Base class 就选择QDialog吧。我就的程序基于对话框。
安装QT和静态编译QTqt静态编译
新建完后,可以看到工程目录有一个Form Files它是放ui文件的地方。双击ui文件可以打开ui编辑器。这样可以利用编辑器很方法的,拖放控件和设置样式了。
安装QT和静态编译QTqt静态编译

运行结果:
安装QT和静态编译QTqt静态编译

但是如果直接去运行我们编译的exe会报错,那是因为我们用的是动态连接。他依赖于QT的一些DLL,如本例子依赖于QtCored4.dll和QtGuid4.dll 这两个占了16.7M。如果是写一些小工具内部使用,用动态连接会比较烦人。下面就介绍如果静态连接。首先要先把QT的lib编译成静态库。

静态连接

QT可以静态链接的。但是缺省安装的是动态的版本。如果需要动态的库,就要自己编译。以下为vs2008环境下的。如果是其它环境则把2008改成相应的版本。
注意:编译完后整个QT大小 25.6G(注意硬盘空间)。编译要超过一个小时,而且会很占CPU。

1.更改qmake.conf文件
打开文件Qt\4.7.3\mkspecs\win32-msvc2008\qmake.conf
更改MD为MT,更改MDd为MTd
即:
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
改为:
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi –MTd

2.配置环境变量
在PATH环境变量中添加:" d:\Qt\4.7.3 " 添加新的环境变量,名字为"QMAKESPEC",值为"win32-msvc2008" 添加新的环境变量,名字为"QTDIR",值为" d:\Qt\4.7.3"
3.设置配置
在开始菜单打开Visual Studio 2008 Command Prompt
cd到源代码所在文件夹(即d:\Qt\4.7.3)
入以下命令然后回车。(更多关于configure命令可以,输入configure –help查看)
configure -platform win32-msvc2008 -debug-and-release -static -fast -qt-sql-odbc -qt-sql-sqlite
然后
选o,回车 选y,回车

4.编译链接
输入nmake回车
然后开始编译,要等很久喔。要一个小时以上。

5.清理中间文件
在编译过程中如果没有产生错误,则可以把编译时产生的中间文件清理掉。
输入nmake clean回车
清理完后,QT还有18.4G
静态编译后试试之前的例子
再编译之前的hello world试试吧。不过要注意的是工程配置要改一改了。
工程配置c/c++ ->code Generation:Runtime Library
Debug Multi-threaded Debug(/MTd)
Release Multi-threaded Debug(/MT)
这时编译还会有连接错误,晕。
连接错误:
error LNK2001: unresolved external symbol "public: static struct QMetaObject const QDialog::staticMetaObject" (?staticMetaObject@QDialog@@2UQMetaObject@@B)

工程配置Linker->Input:Additional Dependencies
qtmain.lib
QtCore4.lib
QtGui4.lib
改成
kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib qtmaind.lib QtCored.lib QtGuid.lib
这样就OK啦。
一个简单的Hello world程序有5.82M。框架确实占了很多。

方煜宽
2011.08.02
转载请保留连接
http://www.cnblogs.com/fangyukuan/archive/2011/08/02/2125291.html

Tags:  gcc静态编译 易语言可静态编译 易语言静态编译 静态编译 qt静态编译

延伸阅读

最新评论

发表评论