Qt5 FOR WINCE7, Visual Studio 2008环境的搭建
Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE。前几天意外发现官方博客说明已经开始支持WINCE了,祥见
http://blog.qt.digia.com/blog/2013/07/30/the-state-of-wince-support-in-qt5/
于是开始用自己的环境体验一下,下面开始环境的搭建。
环境:
系统
Windows 7(64)
IDE
Visual Studio 2008(sp1)
SDK
tcc8925(ARMV4I)
QT
5.1.0
版本
第一步:下载所需文件
以
5.1.0
版本为例,进入地址:
http://qt-project.org/downloads
1.
下载
Qt
源码
第二步:解压与安装
1
考虑到有多个平台的情况,我们
QT
的
shadow builds
方式来编译
QT
,我们使用
VS
的编译器来编译
QT
的代码,所以需要已经装好了
VS2008
的开发环境,
VS2008
,
SP1,MSDN,VS
助手的安装过程不再说明。
2
建立一个
QT
根目录,如
D:\Program\Qt\5.1.0
,(注:创建的目录最好是不包含空格和中文)
3
在
QT
根目录下创建一个
qt
源文件目录,如
D:\Program\Qt\qt5.1.0\qt-src
,用来存放解压包中的文件
4
将下载的
qt-everywhere-opensource-src-5.1.0.zip
解压到
D:\Program\Qt\qt
5.1.0
\qt-src
。
5
在
D:\Program\Qt\qt5.1.0\
目录下创建
shadow builds
编译目录(根据平台的种类可以创建多个),如
D:\Program\Qt\qt 5.1.0\ce7-tcc8925
。
6
配置编译选项
6.1
打开
D:\Program\Qt\qt5.1.0\qt-src\qtbase\mkspecs
,复制
wince70embedded-armv4i-msvc2008
,重命名为
wince70tcc8925-armv7-msvc2008
6.2
打开
wince70tcc8925-armv7-msvc2008
中的
qmake.conf
文件,将其中的SDK配置成自己的平台。
CE_SDK = tcc8925 # replace with actual SDK name
CE_ARCH = ARMv4I
QT_CONFIG -= accessibility
6.3
进入
VS2008
命令行(
Visual Studio 2008 Command Prompt
)
从
Visual Studio 2008
的菜单项里,找到
Visualt Studio Tools
里的
Visual Studio 2008
命令提示符(
Visual Studio 2008 Command Prompt
),这样会自动配好相应的环境变量。或者,也可以打开任意一个命令提示符,然后运行
d:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
,效果是一样的。
6.4
在命令提示符下输入:
PATH D:\Program\Qt\qt5.1.0\ce7-tcc8925\bin;%PATH%
进入
shadow builds
目录
在命令提示符下输入:
cd
D:\Program\Qt\qt5.1.0\ce7-tcc8925
6.5
根据需要配置
QT
编译,如:
DLL
版本
D:\Program\Qt\qt5.1.0\qt-src\configure -release
-confirm-license
-opensource -platform win32-msvc2008 -xplatform wince70tcc8925-armv4i-msvc2008 -qt-zlib -qt-libpng -qt-libjpeg -no-openssl -no-dbus -plugin-sql-sqlite
-nomake demos -nomake examples
-opengl es2
-vcproj -no-style-windowsmobile -no-style-windowsvista -no-style-windowsxp -ltcg -D __ARM_ARCH_5TEJ__
-D
QT_NO_CURSOR=1
7.nmake
在经历了无数次报错,不断的修改后,终于编译完成了,看了下居然还有串口模块,
真是好东西,下面贴张生成的目标文件的图。
8.错误信息
现象
d:\program\qt\qt5.1.0\qt-src\qtbase\include\qtcore\../../src/corelib/global/qglo
bal.h(59) : fatal error C1083: Cannot open include file: ‘QtCore/qconfig.h’: No
such file or directory
解决办法:
D:\Program\Qt\qt5.1.0\ce7-tcc8925\qtbase\src\corelib\global 下qconfig.h 复制到D:\Program\Qt\qt5.1.0\qt-src\qtbase\include\QtCore
现象
error C2653: ‘QPlatformOpenGLContext’ : is not a class or namespace name
没有添加OPENGL选项,还是编译了部分和OPENGL相关的代码
解决办法
添加OPENGL配置选项
现象
error C2146: syntax error : missing ‘;’ before identifier ‘GLint64
具体代码
typedef khronos_int64_t GLint64;
可能是MALI_400的驱动版本头文件和QT定义不一致引起的。
解决办法
先是在在SDK中Windows CE Tools\SDKs\tcc8925\Include\Armv4i\KHR找到khrplatform.h第37行增加下列定义:
typedef __int64 khronos_int64_t;
typedef unsigned __int64 khronos_uint64_t;
仍然报错,于是改成
在D:\Program\Qt\qt5.1.0\qt-src\qtbase\src\gui\opengl\qopengles2ext.h 403行增加定义
typedef __int64 khronos_int64_t;
typedef unsigned __int64 khronos_uint64_t;
问题
D:\Program\Qt\qt5.1.0\qt-src\qtbase\src\plugins\platforms\windows\qwindowswindow
.cpp(1780) : error C2440: ‘<function-style-cast>’ : cannot convert from ‘Qt::Cur
sorShape’ to ‘QWindowsWindowCursor’
解决办法
在D:\Program\Qt\qt5.1.0\qt-src\qtbase\src\plugins\platforms\windows\qwindowswindow.cpp中第1773行增加#ifndef QT_NO_CURSOR,在1783增加#endif
问题
D:\Program\Qt\qt5.1.0\qt-src\qtbase\src\plugins\platforms\windows\qwindowswindow
.cpp(1816) : error C2039: ‘cursor’ : is not a member of ‘QWindowsWindow’
解决办法
1816行增加#ifndef QT_NO_CURSOR,1819行增加#endif
问题
D:\Program\Qt\qt5.1.0\qt-src\qtsvg\src\svg\qsvgtinydocument.cpp(58) : fatal erro
r C1083: Cannot open include file: ‘zlib.h’: No such file or directory
解决办法
D:\Program\Qt\qt5.1.0\qt-src\qtsvg\src\svg\svg.pro,51行改成INCLUDEPATH += D:\Program\Qt\qt5.1.0\qt-src\qtbase\include\QtZlib
如果继续报同样的错,删除目标目录下的临时文件,我这里的操作为清空D:\Program\Qt\qt5.1.0\ce7-tcc8925\qtbase\qtsvg下的所有文件。
问题
‘python’ 不是内部或外部命令,也不是可运行的程序
解决办法
安装并设置环境变量
http://123yun.newhua.com/down/python-3.3.2.zip
假设安装路径为D:\Program\Python33,
输入命令:
PATH
D:\Program\Python33
;%PATH%
问题
Building Qt without accessibility is not supported for qt quick c ontrols.
解决办法
D:\Program\Qt\qt5.1.0\qt-src\qtquickcontrols\qtquickcontrols.pro修改为
load(qt_parts)
requires(contains(QT_CONFIG, accessibility))
问题
D:\Program\Qt\qt5.1.0\qt-src\qtmultimedia\src\multimedia\audio\qaudiodeviceinfo_
win32_p.cpp(417) : error C2065: ‘ICreateDevEnum’ : undeclared identifier
解决办法
不编译qtmultimedia
D:\Program\Qt\qt5.1.0\qt-src\qtmultimedia\qtmultimedia.pro 添加requires(contains(QT_CONFIG, accessibility)),跳过该模块
问题
d:\program\qt\qt5.1.0\qt-src\qtsensors\src\imports\sensors\qmlproximitysensor.h(
73) : error C2059: syntax error : ‘)’
解决办法
D:\Program\Qt\qt5.1.0\qt-src\qtsensors\qtsensors.pro添加requires(contains(QT_CONFIG, accessibility)),跳过
当前Qt for wince支持的模块有
-qtbase
– qtjsbackend
– qtdeclarative
– qtscript
– qtquick1
– qtsvg
– qtgraphicaleffects
– qtimageformats
– qtxmlpatterns
其他模块编译报错,都直接跳过
问题
d:\program\qt\qt5.1.0\qt-src\qtimageformats\src\3rdparty\libmng\libmng_types.h(1
74) : fatal error C1083: Cannot open include file: ‘zlib.h’: No such file or dir
ectory
解决办法
D:\Program\Qt\qt5.1.0\qt-src\qtimageformats\src\3rdparty\zlib_dependency.pri,6行改成INCLUDEPATH += D:\Program\Qt\qt5.1.0\qt-src\qtbase\include\QtZlib
如果继续报同样的错,删除目标目录下的临时文件,我这里的操作为清空D:\Program\Qt\qt5.1.0\ce7-tcc8925\qtbase\qtsvg下的所有文件。
问题
D:\Program\Qt\qt5.1.0\qt-src\qtimageformats\src\3rdparty\libtiff\libtiff\tif_zip
.c(50) : fatal error C1083: Cannot open include file: ‘zlib.h’: No such file or
directory
解决办法
D:\Program\Qt\qt5.1.0\qt-src\qtimageformats\src\3rdparty\libmng.pri,26行添加INCLUDEPATH += D:\Program\Qt\qt5.1.0\qt-src\qtbase\include\QtZlib
问题
D:\Program\Qt\qt5.1.0\qt-src\qtquick1\src\plugins\qmltooling\qmldbg_inspector\ed
itor\zoomtool.cpp(252) : error C2039: ‘setCursor’ : is not a member of ‘QDeclara
tiveView’
解决办法
D:\Program\Qt\qt5.1.0\qt-src\qtquick1\src\plugins\qmltooling\qmldbg_inspector\editor\zoomtool.cpp第252,254行增加
#ifndef QT_NO_CURSOR,#endif
类似的错误都以同样的方式解决。
问题
‘D:\Program\Qt\qt5.1.0\ce7-tcc8925\qtbase\qtbase\bin\lrelease.exe’ 不是内部或外
部命令,也不是可运行的程序
解决办法
下载安装版本的QT5,自带这个程序,或者跳过这个模块。