编译QT FOR VS2010

本文详细介绍了如何在没有QT依赖库的环境中运行QT程序,通过静态编译QT库文件,并指导了使用VS2010进行QT编译的全过程,包括安装必备软件、配置环境、解决编译错误等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先不要使用中文目录,
发布QT程序时,为了使没有QT依赖库的环境中也能运行QT程序,这就需要静态编译你的QT程序。要达到这个目的,首先必须静
态编译你的QT库文件
1 下载Qt的安装包和VS2010的Qt插件
2. 安装Qt Library,注意不能装Qt SDK 我装了Qt SDK1.1.2之后,找不到configure程序,也不知道怎么回事。
3. 安装Qt的VS开发插件
4. 编译Qt
Qt默认使用mingw进行编译,如果要使用VS2010开发,需要将Qt重新编译。
进入开始菜单Microsoft Visual Studio 2010,Visual Studio Tools,Visual Studio Command Prompt (2010),需要注意的是,这里
面必须是使用Visual Studio Command Prompt (2010),不能使用CMD的Dos窗口
进入Qt的安装目录后,执行CD Qt,进入Qt的根目录
运行命令configure -platform win32-msvc2010


configure -debug-and-release -fast -static -platform win32-msvc2010 -no-qt3support -script -scripttools -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-sqlite -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -nomake demos -nomake examples -nomake docs –mp


配置编译选项:Configure -debug-and-release -opensource -static-no-qt3support -mp -platform win32-msvc2010
-release :编译版本
-static :静态编译,这个选项必须选择
后面的参数是选择性编译,为了加快编译速度(-no-去掉的模块名)
o(选择opensource模式)回车,Y(同意license)回车
使用VS2010编译QT 
2011年10月27日
16:20
    分区应用技巧的第1 页    
o(选择opensource模式)回车,Y(同意license)回车
接着就会自动配置Qt的编译环境,等配置结束后,运行nmake,回车,Qt就会开始漫长的编译过程,这段时间非常长,需要4个小时
以上,大家可以在晚上睡觉的时候进行编译。
这里可以不使用nmake来编译,使用jom.exe,这是一个替代nmake的工具能够利用多核CPU的资源来并行编译,能缩短编译时间
jom -j 2  即可2 表示2核
下面是地址
http://qt.gitorious.org/qt-labs/jom 实践证明,这个不好用,编译过程中出错,还是老老实实的nmake吧
我在编译的时候有两次错误需要处理,解决方法如下
编译大概1个小时之后,出现:
01.api/qscriptextensionplugin.h(43): Error: Undefined interface 
02.NMAKE : fatal error U1077: 'C:/Qt/2009.05/qt/bin/moc.exe' : return code '0x1' 
03.Stop. 
04.NMAKE : fatal error U1077: '"d:/Program Files/Microsoft Visual Studio 9.0/VC/BIN
05./nmake.exe"' : return code '0x2' 
06.Stop. 
07.NMAKE : fatal error U1077: 'cd' : return code '0x2' 
08.Stop. 
api/qscriptextensionplugin.h(43): Error: Undefined interface
NMAKE : fatal error U1077: 'C:/Qt/2009.05/qt/bin/moc.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"d:/Program Files/Microsoft Visual Studio 9.0/VC/BIN
/nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop. 
以上是出错代码,解决方法是将
qt/src/script/tmp/moc/debug_shared/mocinclude.tmp
qt/src/script/tmp/moc/release_shared/mocinclude.tmp
删除,然后继续编译。
过了很长时间之后,在编译webkit部分的代码时,会发生错误,系统会停止编译
D:/tools/Qt/2010.05/qt/src/3rdparty/webkit/WebCore/tmp/moc/debug_shared/moc_Sock
etStreamHandlePrivate.cpp(97) : error C2065: “QSslError”: 未声明的标识符
D:/tools/Qt/2010.05/qt/src/3rdparty/webkit/WebCore/tmp/moc/debug_shared/moc_Sock
etStreamHandlePrivate.cpp(97) : error C3861: “socketSslErrors”: 找不到标识符
正在生成代码...
NMAKE : fatal error U1077: “"D:/tools/Microsoft Visual Studio 10.0/VC/BIN/cl.EX
E"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"D:/tools/Microsoft Visual Studio 10.0/VC/BIN/nmake
.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
Stop.
解决方法是将
qt/src/3rdparty/webkit/WebCore/tmp/moc/debug_shared/mocinclude.tmp 
qt/src/3rdparty/webkit/WebCore/tmp/moc/release_shared/mocinclude.tmp
删除之后可以继续编译(重新执行nmake命令)
然后编译就可以正常了。·
下面是配置vs2010
    分区应用技巧的第2 页    
下面是配置vs2010
5.配置VS2010的Qt开发环境(VS2010最好是英文版本,Qt对VS2010中文版本可能支持的不好)
等Qt编译好后就可以配置VS2010的开发环境了,进入VS2010,选择Qt菜单,Qt Option,进入下图界面
点击Add,添加Qt的安装目录
此时我又遇到了一个问题,QT in the given path was built using minGW
解决方法如下
删除lib目录下面的libqtmain.aandlibqtmaind.a 文件即可
清理前,切记把C:\Qt\4.7.3下面的qmake.cache和configure.cache备份到别的地方,然后
nmake confclean 腾出空间。
nmake clean是用来清除编译过程中的中间文件
nmake confclean是用来清除configrature过程的信息
最后再把C:\Qt\4.7.3下面的qmake.cache和configure.cache 复制回远处。
如果不这样,安装qt-vs-addin 后进行Qt Versions 添加路径时将失败。
设置环境变量:
     QTDIR=D:\QTGui\qt
     QMAKESPEC=win32-msvc2010
    path= D:\QTGui\qt;D:\QTGui\bin;D:\QTGui\qt\lib;
从<http://blog.csdn.net/aslucky/article/details/6299319> 插入
    分区应用技巧的第3 页    

编译qt-win-opensource-4.8.2-vs2010中出现的一个bug  

1.下载好qt-win-opensource-4.8.2-vs2010.exe解压安装后,打开VS2010选择Tools->Visual Studio Command Prompt打开Dos窗口

2.进入Qt的安装目录(默认是:C:\Qt\4.8.2)

运行命令 configure -platform win32-msvc2010

选择o回车,Y回车

3.接着是自动配制编译环境,等配置结束后,运行nmake,运行过程中遇到如下bug:

  1. DefaultLocalizationStrategy.cpp
  2. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\yvals.h(21) : war
  3. ning C4005: '_HAS_TR1' : macro redefinition
  4. command-line arguments : see previous definition of '_HAS_TR1'
  5. platform\DefaultLocalizationStrategy.cpp(327) : error C2001: newline in constant
  6. platform\DefaultLocalizationStrategy.cpp(327) : fatal error C1057: unexpected en
  7. d of file in macro expansion
  8. NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0
  9. \VC\BIN\cl.EXE"' : return code '0x2'
  10. Stop.
  11. NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0
  12. \VC\BIN\nmake.exe"' : return code '0x2'
  13. Stop.
  14. NMAKE : fatal error U1077: 'cd' : return code '0x2'
  15. Stop.
  16. NMAKE : fatal error U1077: 'cd' : return code '0x2'
  17. Stop.
DefaultLocalizationStrategy.cpp
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\yvals.h(21) : war
ning C4005: '_HAS_TR1' : macro redefinition
        command-line arguments :  see previous definition of '_HAS_TR1'
platform\DefaultLocalizationStrategy.cpp(327) : error C2001: newline in constant

platform\DefaultLocalizationStrategy.cpp(327) : fatal error C1057: unexpected en
d of file in macro expansion
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\cl.EXE"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\BIN\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

这个bug的官方report见 链接点击

解决如下: 打开文件: C:\Qt\4.8.2\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp 找到327行

删除<selection>的引号“”

如下:

  1. String DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary(const String& selectedString)
  2. {
  3. #if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
  4. UNUSED_PARAM(selectedString);
  5. return WEB_UI_STRING("Look Up in Dictionary","Look Up in Dictionary context menu item");
  6. #else
  7. #if USE(CF)
  8. RetainPtr<CFStringRef> selectedCFString(AdoptCF, truncatedStringForLookupMenuItem(selectedString).createCFString());
  9. return formatLocalizedString(WEB_UI_STRING("Look Up “%@”","Look Up context menu item with selected word"), selectedCFString.get());
  10. #else
  11. return WEB_UI_STRING("Look Up "<selection>"","Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
  12. #endif
  13. #endif
  14. }
String DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary(const String& selectedString)
{
#if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
    UNUSED_PARAM(selectedString);
    return WEB_UI_STRING("Look Up in Dictionary", "Look Up in Dictionary context menu item");
#else
#if USE(CF)
    RetainPtr<CFStringRef> selectedCFString(AdoptCF, truncatedStringForLookupMenuItem(selectedString).createCFString());
    return formatLocalizedString(WEB_UI_STRING("Look Up “%@”", "Look Up context menu item with selected word"), selectedCFString.get());
#else
    return WEB_UI_STRING("Look Up "<selection>"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
#endif
#endif
}


改为:

  1. String DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary(const String& selectedString)
  2. {
  3. #if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
  4. UNUSED_PARAM(selectedString);
  5. return WEB_UI_STRING("Look Up in Dictionary","Look Up in Dictionary context menu item");
  6. #else
  7. #if USE(CF)
  8. RetainPtr<CFStringRef> selectedCFString(AdoptCF, truncatedStringForLookupMenuItem(selectedString).createCFString());
  9. return formatLocalizedString(WEB_UI_STRING("Look Up “%@”","Look Up context menu item with selected word"), selectedCFString.get());
  10. #else
  11. return WEB_UI_STRING("Look Up <selection>","Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
  12. #endif
  13. #endif
  14. }
String DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary(const String& selectedString)
{
#if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
    UNUSED_PARAM(selectedString);
    return WEB_UI_STRING("Look Up in Dictionary", "Look Up in Dictionary context menu item");
#else
#if USE(CF)
    RetainPtr<CFStringRef> selectedCFString(AdoptCF, truncatedStringForLookupMenuItem(selectedString).createCFString());
    return formatLocalizedString(WEB_UI_STRING("Look Up “%@”", "Look Up context menu item with selected word"), selectedCFString.get());
#else
    return WEB_UI_STRING("Look Up <selection>", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
#endif
#endif
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值