Qt 4.6.2在VS2005,VS2008,MinGW环境下的静态编译

 文章来源 :IT工程技术网  http://www.systhinker.com/html/15/n-11515.html

 

编译准备

下载NOKIA网站上的QT SDK,解压或安装到相关目录。
本文以QT 4.6.2为例,下载地址:http://get.qt.nokia.com/qt/source/qt-win-opensource-4.6.2-vs2008.exe

或者直接下载源码:http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.zip

下载后安装好的目录结构为(假设安装到D:/QT):
├─share
├─lib
├─bin
├─mingw
└─qt
    ├─translations(QT语言文件目录)
    ├─tools(QT相关工具源码目录)
    ├─src(源代码目录)
    ├─qmake(qmake源代码目录)
    ├─plugins(图形,数据库等插件目录)
    ├─mkspecs(平台配置文件)
    ├─lib(库文件)
    ├─include(头文件)
    ├─examples(示例程序)
    ├─doc(文档)
    ├─demos(演示程序)
    ├─config.tests
    ├─bin(命令行工具)
    └─qtc-debugging-helper

configure配置工具在qt目录,以下假设QTDIR=D:/QT/SDK/qt,编译前最好清空lib,demos,examples,docs四个目录,配置完成后在这几个目录下放一个空的Makefile文件,避免make时报错。


VS2005动态编译

1.设置VS2005的环境变量
2.设置目标平台
set QMAKESPEC=win32-msvc2005
3.进入QTDIR目录运行配置,生成Makefile文件
configure -platform win32-msvc2005 -release -opensource -shared -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista
4.运行nmake /I /K(附带/I /K 选项可以避免出现错误时编译自动终止,用于跳过错误继续编译其它文件)

经过这样编译的Qt库不依赖mingwm10.dll,libgcc_s_dw2-1.dll,但依赖Qt库的Dll文件和微软的CRT运行时库,使用此Qt库编译Windows平台下的程序,发布时需带上用到的Qt链接库Dll文件和微软的CRT运行时库Dll文件。


VS2005静态编译
(VS2008编译同理,启动相应的命令行,设置相应的目标平台,修改相应的配置文件)
1.设置VS2005的环境变量
2.设置目标平台
set QMAKESPEC=win32-msvc2005
3.修改mkspecs/win32-msvc2005目录下的配置文件qmake.conf
将下面两行:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
修改为:
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
(D是指dynamic,T是指static,d是指debug)
4.进入QTDIR目录,运行配置,生成Makefile文件
set QMAKESPEC=win32-msvc2005
configure -platform win32-msvc2005 -release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista
5.运行运行nmake /I /K

经过这样编译的Qt库不依赖于任何Dll文件(如微软的CRT运行时库),使用此Qt库编译Windows平台下的程序发布时不需要附带任何额外的Dll文件。


MinGW静态编译

1.设置MinGW的环境变量
2.设置目标平台
set QMAKESPEC=win32-g++
3.修改mkspecs/win32-g++目录下的配置文件qmake.conf
将下面一行:
QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
修改为:
QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
然后将下面一行:
QMAKE_LFLAGS_DLL        = -shared
修改为:
QMAKE_LFLAGS_DLL        = -static
4.QTDIR目录,运行配置,生成Makefile文件
set QMAKESPEC=win32-g++
configure -platform win32-g++ -release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support  -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista
5.运行运行mingw32-make -i -k(-i -k选项的含义与上面nmake的相同)

 经过这样编译的Qt库,不依赖任何Dll文件(如mingwm10.dll,libgcc_s_dw2-1.dll),使用此Qt库编译的Windows平台下的程序发布时不需要附带任何额外的Dll文件。

编译事项说明

编译完成后可以删除bin目录中所有不是当前编译日期的文件。

建议编译前移除examples和demos文件夹的所有文件,避免重编译这两个文件夹,加快编译速度。

另外,编译命令请根据自己的实际情况配置,上面我的配置是(以VS2005静态编译为例):
-platform win32-msvc2005 目标平台
-release 关闭调试信息
-no-exceptions 除去异常支持
-opensource 开源版
-static 创建静态库
-fast 快速配置,只生成Qt库文件及子目录的Makefile文件,其它的Makefile文件后面再使用qmake生成
-qt-sql-sqlite SQLite驱动支持
-plugin-sql-sqlite  SQLite链接插件支持
-no-qt3support  不编译Qt3兼容库
-qt-zlib zlib库
-qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg 图形格式插件库
-no-webkit 不编译webkit,此选项可极大加快编译速度,需要使用WebKit的可以删除此选项
-qt-style-windowsxp -qt-style-windowsvista 支持XP和Vista主题样式

注意:使用静态编译的程序通常较大,建议发布前使用UPX压缩,一般可以减少至少50%的大小。

 

文章来源 :IT工程技术网  http://www.systhinker.com/html/15/n-11515.html

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的基于Qt 4.6.2的温度湿度折线图绘制示例代码: ```cpp #include <QtGui/QApplication> #include <QtGui/QWidget> #include <QtGui/QPainter> #include <QtCore/QList> #include <QtCore/QPointF> class TemperatureHumidityGraph : public QWidget { public: TemperatureHumidityGraph(QWidget *parent = 0) : QWidget(parent) {} protected: void paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::red); QList<QPointF> points; points << QPointF(50, 200) << QPointF(100, 150) << QPointF(150, 120) << QPointF(200, 100) << QPointF(250, 80) << QPointF(300, 70); // 绘制温度折线图 painter.drawPolyline(QPolygonF(points)); painter.setPen(Qt::blue); QList<QPointF> points2; points2 << QPointF(50, 150) << QPointF(100, 120) << QPointF(150, 100) << QPointF(200, 90) << QPointF(250, 80) << QPointF(300, 70); // 绘制湿度折线图 painter.drawPolyline(QPolygonF(points2)); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); TemperatureHumidityGraph graph; graph.show(); return app.exec(); } ``` 这段代码创建了一个`TemperatureHumidityGraph`类,它是一个继承自`QWidget`的窗口部件,重写了`paintEvent`方法用来绘制温度湿度折线图。 在`paintEvent`方法中,我们首先创建了一个`QPainter`对象,并设置了抗锯齿属性和红色画笔。接着,我们定义了一个`QList<QPointF>`类型的变量`points`,它包括了一组温度数据的坐标点,这些坐标点用来构建温度折线图。 使用`QPainter`对象的`drawPolyline`方法可以根据坐标点绘制出一条折线图。同样的,我们定义了另一个`QList<QPointF>`类型的变量`points2`,它包括了一组湿度数据的坐标点,用来绘制湿度折线图。 最后,在`main`函数中,我们创建了一个`TemperatureHumidityGraph`对象,并将其显示出来。 当程序运行时,会显示一个简单的温度湿度折线图窗口。你可以根据需要修改坐标点的值来实现更加复杂的折线图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值