Qt5 FOR WINCE7, Visual Studio 2008環境的搭建python
Qt5發佈時,試過配置Qt5 for wince的環境,緣由是暫時不支持WINCE。前幾天意外發現官方博客說明已經開始支持WINCE了,祥見sql
http://blog.qt.digia.com/blog/2013/07/30/the-state-of-wince-support-in-qt5/windows
因而開始用本身的環境體驗一下,下面開始環境的搭建。ide
環境:svg
系統 Windows 7(64)ui
IDEVisual Studio 2008(sp1)spa
SDKtcc8925(ARMV4I)命令行
QT5.1.0版本orm
第一步:下載所需文件sqlite
以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\qt5.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,自帶這個程序,或者跳過這個模塊。