• 11050阅读
  • 5回复

在Windows XP下用GCC 4.3.2编译Qt 4.4.3实战 [复制链接]

上一主题 下一主题
离线shiyutang
 
只看楼主 倒序阅读 楼主  发表于: 2008-10-15
— 本帖被 XChinux 执行加亮操作(2008-10-15) —
1.下载GCC 4.3.2和工具包的编译版,在这里:http://www.tdragon.net/recentgcc/ 点“TDM/MinGW Installer 1.808.3”下载,并且安装好;

2.下载Qt 4.4.3。去这里下载:ftp://ftp.trolltech.com/qt/source/qt-win-opensource-4.4.3-mingw.exe 完成后安装。注意选了MinGW编译器位置之后安装程序会报错,不用管它,确定安装即可;

3.在环境变量的PATH中增加你的MinGW\bin和Qt\4.4.3\bin的详细位置;

4.Qt 4.4.3可能有些小bug,编译时会报错,所以需要修改以下一些文件:

(1) Qt\4.4.3\src\corelib\arch\qatomic_windows.h:找到第386-392行,应该是这样的:
extern "C" {
    __declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long);
    __declspec(dllimport) long __stdcall InterlockedIncrement(long *);
    __declspec(dllimport) long __stdcall InterlockedDecrement(long *);
    __declspec(dllimport) long __stdcall InterlockedExchange(long *, long);
    __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long);
}
请改成这样:
extern "C" {
    __declspec(dllimport) long __stdcall InterlockedCompareExchange(volatile long *, long, long);
    __declspec(dllimport) long __stdcall InterlockedIncrement(volatile long *);
    __declspec(dllimport) long __stdcall InterlockedDecrement(volatile long *);
    __declspec(dllimport) long __stdcall InterlockedExchange(volatile long *, long);
    __declspec(dllimport) long __stdcall InterlockedExchangeAdd(volatile long *, long);
}

(2) Qt\4.4.3\src\corelib\io\qfsfileengine_win.cpp:找到第67-68行,应该是这样的:
#define SECURITY_WIN32
#include <security.h>
请在这两行中间加上一行:#include <subauth.h>,使其像这样:
#define SECURITY_WIN32
#include <subauth.h>
#include <security.h>

(3) Qt\4.4.3\src\gui\inputmethod\qwininputcontext_win.cpp,找到第500行,应该是这样:
bool QWinInputContext::endComposition()
请在这行前面加上一行extern bool qt_sendSpontaneousEvent(QObject *, QEvent *);,使其像这样:
extern bool qt_sendSpontaneousEvent(QObject *, QEvent *);
bool QWinInputContext::endComposition()

5.OK,现在应该可以编译了。点开始菜单中的“Qt by Nokia v4.4.3 (OpenSource)”->“Qt 4.4.3 Command Prompt”,然后输入“configure -debug-and-release -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg”回车进行configure,几分钟之后configure完成,再输入“mingw32-make”回车就可以编译了。编译可能需要3个小时时间(我的电脑CPU是Intel Core Duo T7500的,内存是2G),大概需要4G空间。编译完成后,请输入“mingw32-make clean”清除中间文件,这样可以使占用空间减少到1.95G。

6.好了。请享用GCC 4.3.2和Qt 4.4.3带给你的快乐吧。

请有空来我的网站看看啦:http://www.shiyutang.com。转载时请注明作者是shiyutang,并且包含我的个人网站地址 http://www.shiyutang.com
离线zzh

只看该作者 1楼 发表于: 2008-10-15
gcc 4.3.2有什么改进吗?
离线shiyutang
只看该作者 2楼 发表于: 2008-10-15
看不出了相对Gcc 4.2有什么大的改进。当然,相对于Gcc 3还是有很大改进的。比如Gcc3就不支持Unicode,但Gcc4支持。
[ 此贴被shiyutang在2008-10-15 15:20重新编辑 ]
离线favormm

只看该作者 3楼 发表于: 2008-10-16
请问如何才能静态编译出QT库, gcc+QT4.4.3 for windows
离线cxjnet
只看该作者 4楼 发表于: 2009-01-05
学习哦
离线jaypei

只看该作者 5楼 发表于: 2009-03-04
已成功,非常感谢!~
快速回复
限100 字节
 
上一个 下一个