VS 静态编译QT

来源:互联网 发布:买软件的网站 编辑:程序博客网 时间:2024/04/29 12:40

静态编译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->QtApplication,如下图:

点击OK后,Base class 就选择QDialog吧。我就的程序基于对话框。

新建完后,可以看到工程目录有一个Form Files它是放ui文件的地方。双击ui文件可以打开ui编辑器。这样可以利用编辑器很方法的,拖放控件和设置样式了。

 

运行结果:

 

但是如果直接去运行我们编译的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.设置配置

在开始菜单打开VisualStudio 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回车

静态编译后试试之前的例子

再编译之前的helloworld试试吧。不过要注意的是工程配置要改一改了。

工程配置c/c++->code Generation:Runtime Library             

Debug    Multi-threaded Debug(/MTd)

Release    Multi-threaded Debug(/MT)

这时编译还会有连接错误,晕。

连接错误:

errorLNK2001: unresolved external symbol "public: static struct QMetaObjectconst QDialog::staticMetaObject"(?staticMetaObject@QDialog@@2UQMetaObject@@B)

 

工程配置Linker->Input:Additional Dependencies

qtmain.lib

QtCore4.lib

QtGui4.lib

改成

kernel32.lib user32.lib shell32.libuuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.libimm32.lib winmm.lib winspool.lib qtmaind.lib QtCored.lib QtGuid.lib

这样就OK啦。

 一个简单的Helloworld程序有5.82M。框架确实占了很多。


方煜宽

 2011.08.02

转载请保留连接 

http://www.cnblogs.com/fangyukuan/archive/2011/08/02/2125291.html 

0 0