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

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

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

 

运行结果:

 

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

 

静态连接

QT可以静态链接的。但是缺省安装的是动态的版本。如果需要动态的库,就要自己编译。以下为vs2008环境下的。如果是其它环境则把2008改成相应的版本。

注意:编译完后整个QT大小 25.6G(注意硬盘空间)。编译要超过一个小时,而且会很占CPU

 

1.更改qmake.conf文件

打开文件Qt\4.7.3\mkspecs\win32-msvc2008\qmake.conf

更改MDMT,更改MDdMTd

即:

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回车

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

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

工程配置c/c++ ->code GenerationRuntime 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->InputAdditional 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 


 

作者: fangyukuan 发表于 2011-08-02 17:42 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"