配置Qt for VS2005, VS2008 Run on WinCE6.0 平台

来源:互联网 发布:手机淘宝在哪装修 编辑:程序博客网 时间:2024/05/29 12:58

一.准备环境:

  • 操作系统:
    Windows7 x64

  • wince上的Qt库版本:

    • 版本编译失败:qt-everywhere-opensource-src-4.8.6.zip
    • 版本编译成功:qt-everywhere-opensource-src-4.7.3.zip
  • Windows CE 6.0

  • VS2008

  • qt在windows下面的sdk:
    qt-opensource–windows-x86-msvc2013_64.opengl-5.3.1.exe
    或者:(没影响)
    qt-win-opensource-4.7.3-vs2008.exe

  • WinCE6.0 SDK:
    Windows Mobile 6 Standard SDK Refresh.msi
    根据需要决定是否安装WinCE6.0补丁

    如果是非官方版SDK,可自行安装:
    WINCE6.0_CHS_SDK.msi

  • Qt在Visual Studio上的插件:
    qt-vs-addin-1.1.10.exe

二. 配置Qt:

  • 创建新的目录C:\Qt\qt4.7.3-wince60, 解压qt-everywhere-opensource-src-4.7.3.zip到该目录下
    Note: 新建的目录中不能有空格
  • 打开C:\Qt\qt4.7.3-wince60\mkspecs
  • 按照按文件夹下的命名规则 :
    wince<version><SDK-shortcut>-[architecture]-msvc2005<\br>
  • 新建子文件夹 wince60chsint-armv4i-msvc2008
  • 复制名字近似的mkspec子目录下的qmake.conf和qplatformdefs.h文件到该新建的文件夹中
  • 打开qmake.conf文件修改一下两个参数:
    • CE_SDK 指定SDK的名字 (specifies the name of the SDK)
    • CE_ARCH 指定目标架构的平台 (specifies information about the target architecture)
    • 修改如下:
      CE_SDK = WINCE6.0_CHS_SDK # replace with actual SDK name
      CE_ARCH = ARMV4I
  • 添加系统环境变量C:\qt\qt4.7.3-wince60\bin
  • 使用管理员权限打开VS2008 Command Prompt,运行命令configure -platform win32-msvc2008 -xplatform wince60chsint-armv4i-msvc2008

    Note:
    不使用管理员权限可能会提示复制mkspec失败
    提示选择Qt的版本时

    Type ‘c’ if you want to use the Commercial Edition.
    Type ‘o’ if you want to use the Open Source Edition.

    输入o,表示使用开源版本。或者可以在configure命令中加上参数-opensource,则不会出现该提示。

    This is the Qt for Windows CE Open Source Edition.

    You are licensed to use this software under the terms of
    the GNU Lesser General Public License (LGPL) version 2.1
    or the GNU General Public License (GPL) version 3.

    Type ‘3’ to view the GNU General Public License version 3 (GPLv3).
    Type ‘L’ to view the Lesser GNU General Public License version 2.1 (LGPLv2.1).
    Type ‘y’ to accept this license offer.
    Type ‘n’ to decline this license offer.

    然后提示License为LGPL2.1或者GPL3,同样的输入y表示接收该license,然后继续

  • 由于configure过程中example模块会耗费很多时间,或者出现配置Qt失败,可以选择避开这一部分模块,加上参数-nomake examples使用如下命令:
    configure -platform win32-msvc2008 -xplatform wince60chsint-armv4i-msvc2008 -opensource -nomake examples

问题追踪:

Qt4.8.6版本configure失败具体错误:

  • 使用powershell:
    使用powershell的好处是有很多gnu实用工具可用:比如tee命令输出log,并重定向到log文件,方便追踪。但是qmake build失败。在尝试的过程中也会有如下错误:
......c1xx : fatal error C1083: Cannot open source file: 'Studio': No such file or directoryxmlc1xx : fatal error C1083: Cannot open source file: '9.0\VC\src\corelib\xml': No such file or directoryqmake_pch.hc:\qt\qt-everywhere-opensource-src-4.8.6\include\qtcore\../../src/corelib/global/qglobal.h(45) : fatal error C1083: Cannot open include file: 'stddef.h': No such file or directoryBuilding qmake failed, return code 2

这里贴出截图:

这里写图片描述

  • Powershell 使用失败分析:
    会将Windows目录下文件夹中的空格识别为单独的文件,这应该是windows环境下默认没有转移字符’\’的原因,比如“Program Files”在Linux下应该是“Program\ Files”

    后面查到Qt官方资料,确实申明:安装Qt源码文件时,安装路径不能有空格,参考这里

    所以Powershell应该是可以使用的。

  • 使用Visual Studio 2008 Command Prompt:

    这里使用的是管理员权限。
    qmake build成功,makefile也创建成功,但是遇到了NMAKE U1077问题:

    NMAKE: fatal error U1077: 'cd':return code '0x2'Stop.Building src/tools failed, return code 2

    这里写图片描述

  • Qt4.8.6 问题分析:
    编译时遇到的错误,需要打开源文件查看时,推荐就用Qt打开,由于是在配置Qt环境,具有自动索引功能,也有很多默认提示

    经分析基本都是src/corelib/codec目录下的文件编译时找不到一些头文件,所以找到该目录下相应的“Qt include files”设置文件codec.pri
    添加以下语句:

# Qt core library codecs moduleHEADERS += \......tools/qlist.h \global/qglobal.h \codecs/qtextcodec_p.h
同时针对具体错误‘private/qtextcodec_p.h’找不到的问题,修改了qutfcodec_p.h头文件include的位置,使得预编译器能找到该include的头文件:
- #include "private/qtextcodec_p.h"+ #include "QtCore/private/qtextcodec_p.h"

针对具体错误qutfcodec.cpp中‘qendian.h’no such file or directory的问题,打开该文件,修改头文件include的位置,使得预编译器能找到该include的头文件:

- include "qendian.h"- include "qchar.h"+ include "../global/qendian.h"+ include "../tools/qchar.h"

最后将头文件qlist.h拷贝到了C:\Qt\qt-everywhere-opensource-src-4.8.67\src\corelib\codecs\下面

最后corelib模块下的codecs子模块编译通过!

  • Qt4.8.6 失败总结:
    经过手动修改colib模块下的源码对头文件include的位置,编译通过,但是很快其他模块也有同样的问题比如io, kernel, 修改不过来。并且尝试修改src/corelib模块下的.pro和corelib下子模块的.pri文件,比如corelib.pro, io.pri都没有效果,很多次编译失败后留意到一个警告,应该是产生问题的根源:
warning "Inclusion of header files from include/Qt is deprecated."

include/Qt下的头文件都没有包括进来,所以会有非常多的c1xx编译错误(fatal error)找不到头文件:No such file or directory

  • 由于错误太多,手动修改太繁琐,所以最后只能放弃该版本。

Qt4.7.3版本configure成功

经过网上查找,最终选择了编译较容易成功的Qt4.7.3版本。配置和Qt4.8.6版本一样。

使用Visual Studio 2008 Command Prompt:

  • 运行命令:configure -platform win32-msvc2008 -xplatform wince60chsint-armv4i-msvc2008
    一次性编译通过, 运行结果如下:
    这里写图片描述

    系统提示:
    “Qt is now configured for building. To start the build run: setcepaths.bat wince60chsint-armv4i-msvc2008 && nmake”

  • setcepaths.bat 就是运行脚本配置,并且会生成C:\Qt\qt4.7.3-wince60\binqmake.exe.

  • 如果配置Qt library时为了节省时间,不配置examples模块时,运行:
    configure -platform win32-msvc2008 -xplatform wince60chsint-armv4i-msvc2008 -opensource -nomake examples -nomake tests

三. 构建Qt 库:

setcepaths.bat是为了运行nmake而检查和设置系统环境变量, 其运行的命令就是根据用户提供的第一个参数,假如输入C:\Qt\qt4.7.3-wince60>setcepaths.bat wincewm60standard-msvc2008,则会条件选择执行以下命令:

checksdk.exe -sdk "Windows Mobile 6 Standard SDK (ARMV4I)" -script tmp_created_script_setup.bat 1>NULtmp_created_script_setup.batdel tmp_created_script_setup.batecho Windows Mobile 6 Standard selected, environment is set up

设置系统环境失败:

因为之前将c:\qt\qt4.7.3-wince60\bin添加到了环境变量,所以这里可以直接运行setcepaths.bat,如果有问题,先cd到bin目录下,再执行C:\Qt\qt4.7.3-wince60\bin>setcepaths.bat wince60chsint-armv4i-msvc2008

但是会有错误,找不到具体的SDK.

问题追踪:

修改环境配置脚本setcepaths.bat:

我打开自动配置脚本setcepaths.bat后发现没有IF或者`ELSE IF语句执行wince60chsint-armv4i-msvc2008,所以手动修改了源文件setcepaths.bat, 添加了如下代码:

) ELSE IF "%1" EQU "wince60chsint-armv4i-msvc2008" (checksdk.exe -sdk "WINCE6.0_CHS_SDK (ARMV4I)" -script tmp_created_script_setup.bat 1>NULtmp_created_script_setup.batdel tmp_created_script_setup.batecho Windows CE 6 CHSINT selected, environment is set up)

这里参数-sdk后面 “WINCE6.0_CHS_SDK (ARMV4I)”是SDK在系统中安装后的实际名字,如果填错,也是设置不成功。

查看系统中安装的SDK:

运行checksdk.exe -list查看当前系统中安装的SDK的实际名字:

C:\Qt\qt4.7.3-wince60>checksdk.exe -listAvailable SDKs:SDK Name: Pocket PC 2003 (ARMV4)SDK Name: Smartphone 2003 (ARMV4)SDK Name: Windows Mobile 5.0 Pocket PC SDK (ARMV4I)SDK Name: Windows Mobile 5.0 Smartphone SDK (ARMV4I)SDK Name: STANDARDSDK_500 (ARMV4I)SDK Name: STANDARDSDK_500 (x86)SDK Name: STANDARDSDK_500 (SH4)SDK Name: STANDARDSDK_500 (MIPSII)SDK Name: STANDARDSDK_500 (MIPSII_FP)SDK Name: STANDARDSDK_500 (MIPSIV)SDK Name: STANDARDSDK_500 (MIPSIV_FP)SDK Name: CHSINT SDK For WinCE 6.0 (ARMV4I)SDK Name: Windows Mobile 6 Standard SDK (ARMV4I)

所以用CHSINT SDK For WinCE 6.0 (ARMV4I)代替刚才代码里面的”WINCE6.0_CHS_SDK (ARMV4I)”
实际修改源文件setcepaths.bat时添加代码如下:

...) ELSE IF "%1" EQU "wince60chsint-armv4i-msvc2008" (checksdk.exe -sdk "CHSINT SDK For WinCE 6.0 (ARMV4I)" -script tmp_created_script_setup.bat 1>NULtmp_created_script_setup.batdel tmp_created_script_setup.batecho Windows CE 6 CHSINT selected, environment is set up)...

再运行C:\Qt\qt4.7.3-wince60\bin>setcepaths.bat wince60chsint-armv4i-msvc2008显示成功。

运行nmake:

运行nmake时会执行上一步生成的各个模块的makefile文件,完成自动编译。
直接运行nmake, 第一次运行显示失败,系统提示编译器错误, 请重新运行,然后就重新运行了nmake.

接下来就是慢慢欣赏快速刷屏…很有美感,可以歇一会忙别的事情,时间很长很长…

编译完成后在目录C:\Qt\qt4.7.3-wince60\lib下会生成很多动态和静态库:
这里写图片描述

四. 使用:

  • 安装Qt 提供的Visual Studio 的插件qt-vs-addin-1.1.10.exe

安装完成后启动VS2008会在菜单栏中生成Qt菜单,新建工程时,也会出现Qt Project选项:
这里写图片描述

这里写图片描述

  • 如果通过VS2008生成可执行文件:
    新建VS2008工程,编译生成.exe可执行文件,部署到运行WinCE环境的机器上或者模拟器中,并将库文件QtCore4.dll 和QtGui4.dll拷贝到exe可执行文件同一目录下,然后运行exe就可以了。

  • 如果通过Qt生成可执行文件:
    配置Qt(qt-opensource–windows-x86-msvc2013_64.opengl-5.3.1.exe),选择工具->选项–>构建和运行:

    • 编译器:选择之前安装的SDK: CHSINT SDK For WinCE 6.0 (ARMV4I)
    • Qt Version: 选择C:\Qt\qt4.7.3-wince60\bin\qmake.exe(configure 生成)
    • 构建套件(Kit)->添加->Make参数: 设置为install, 同时概要中设置构建目录

    打开需要编译的工程,编译完成后,会在之前设置的构建目录bin目录下生成可执行文件,将nmake生成的库文件QtCore4.dll 和QtGui4.dll拷贝到同一目录下,打包后部署到WinCE环境的机器上或者模拟器中运行。

参考:

  • http://doc.qt.io/qt-5/install-wince.html
  • http://wiki.c2.com/?UsingNmake
  • http://doc.qt.io/qt-5/qmake-manual.html
  • http://doc.qt.io/qt-5/windowsce-customization.html
  • http://blog.csdn.net/trueman_onlyme/article/details/7341527
  • https://www.douban.com/note/267831870/
  • http://stackoverflow.com/questions/21859376/build-qt-5-2-for-windows-ce-6
  • http://doc.qt.io/qt-5/windows-building.html
  • https://wiki.qt.io/Building_Qt_5_from_Git
0 0