首先不要使用中文目录,
发布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:
- 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.
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>的引号“”
如下:
- 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
- }
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
}
改为:
- 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
- }
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
}