[关闭]
@SiberiaBear 2016-05-01T03:55:28.000000Z 字数 7342 阅读 3899

wince工业屏下QT开发环境搭建

wince

固定链接:https://www.zybuluo.com/SiberiaBear/note/362868


最近由于项目需要,将开始使用wince的工业屏。当然,背景是这个工业屏是厂商定制的,所以我手里边没有硬件上的任何资料,出于商业保密,我将不透露工业屏的品牌信息,这个工业屏在国内比较大众。

我的同事通过联系工业屏厂商,索要到了这个工业屏的SDK文件,这个SDK文件是必须需要的。如果自己开发wince系统,这个SDK会从Platform builder中导出,如果是选用商业wince系统,SDK会由供应商主动提供,如果使用工业屏硬件厂商基于wince定制的二次系统,不满足眼前的系统而需要直接在wince上开发,就像我现在面临的情况,那就需要想办法搞到SDK,厂商给不给是对方心情的事情。当然,我没有搞到硬件的资料,所以,眼前还是一条黑路。

不过,还好,开发环境搭建这块走通了,我也摸索了一个星期,这里做个总结,一方面让自己回顾一下遇到的问题和解决方法,另一方面,可以帮助同样有这样需求的人一些参考。

由于我当前只需要开发基于wince的应用软件,而不需要开发系统和驱动,所以PB那块的东西都没弄,如果需要编译wince系统的请右转谷歌。因为硬件资料没有,所以编译系统这块不敢走,如有高人还望指点。

解决了一个星期困扰我的问题,一开心,就出去吃了个火锅。

开发环境与工具概述

我将使用VS2008开发wince,使用QT做GUI开发,硬件芯片型号是AM3352,工控机wince系统是windows embedded compact 7(WEC7),开发机是windows 10。
如果以上信息不同,请谨慎参考。

这里必须强调:Visual Studio 2008 必须使用英文版,必须使用英文版,必须使用英文版,否则后边QT编译通不过,我试过很多QT-everywhere的版本,都不行。对应的SP1包也要是对应的英文版。
必须使用VS2008专业版及以上的版本,以下的版本不支持开发wince,我使用的是专业版,激活很简单。我这个包自带激活码。

没试过2005能不能行,似乎不支持WEC7了。最初开发时认为工业屏上是wince6.0,走过一段弯路。

QT使用的是4.8.4,但这个因人而异,网上用5.6的版本的QT来开发wince都有。

我这里不会给出下载链接或下载包,原因是VS2008去官网下就好,SP1也能在官网上找到,SDK包自己搞,QT的东西在download.qt.io/archive上就能找到,现成的。下载网速都正常。如果需要我提供请联系我QQ:1035023682。

搭建步骤

首先安装Visual Studio 2008

这一步比较简单,注意在安装时,需要选择custom选项,将多语言的智能设备一项选中(英文不记得了,找一下就行)。还有,如果你的系统也是win10的话,就不必要选SQL部分的功能了,因为win10不支持SQL2008了(似乎win8也不支持了)。数据库这块怎么办?我没想这么多。

注意安装路径不要有汉语和空格。

VS2008的版本号是9.0,所以安装路径是Visual Studio 9.0是正确的。

第一次安装,这一步需要等待一段时间,大概20分钟,因为是在线下载的,国外的东西下的都慢。

安装完之后,电脑上会出现好多安装包:

Microsoft Visual Studio 9.0
Business Objects
Windows CE Tools
Windows SQL Server
Microsoft.NET
Microsoft Device Emulator
Windows Mobile 5.0 SDK R2
Microsoft SQL Server Compact Edition
Microsoft Office
MSBuild
HTML Help Workshop
Common Files
CE Remote Tools
Microsoft Web Designer Tools
以及一堆扔在我系统盘根目录下边的txt和dll文件。
(为了工作,先忍了)

安装SDK

一直下一步安装完就行。

这个SDK会默认安装到Program Files (x86)\Windows CE Tools\SDKs\文件夹下。

打开VS2008,Tools菜单-选项-设备工具-设备:下,如果找到这个SDK,那就是安装成功了。

安装QT相关软件

这部分是最麻烦的,折腾我好久,并且好几天的功夫花在这上边,结果最后发现是中文版VS2008的鬼,再次强调,必须用英文版。

安装路径在C:\Qt\4.8.4

这个可以在编译前安装,也可以在编译后安装,我试过都行。其实就是2008的一个插件。注意安装是看清只安装2008的部分,另有2005和2010的版本不安装。

注意,下载时一定要看清文件大小,保证下载完整,我有一次失败就是因为这个压缩包下载不完整导致的。

  1. 这部分比较耗时间,首先把解压后的文件放到一个目录下,我放到C:\Qt\qt-wince484下。
  2. 在电脑环境变量中加入:C:\Qt\qt-wince484
  3. 打开VS2008,从Tools菜单中找到命令行工具,打开,cd到C:\Qt\qt-wince484下。

  4. cd到mkspecs目录下,打开wince70embedded-armv4i-msvc2008文件夹,通过记事本修改其中qmake.conf文件:(注意,大小写区分,去查你的SDK名字,写成armv4i导致最后qt option时无法添加SDK,是我走过的坑)
    CE_SDK = AM335xSDK
    CE_ARCH = ARMv4I

  5. cd到qt-wince484目录下,运行:
  1. configure -platform win32-msvc2008 -xplatform wince70embedded-armv4i-msvc2008
等待配置结束,如果有问题,解决问题,一般不会有问题。如果弹出帮助文档,请检查上边的命令两个platform有没有拼对。

6. cd到bin目录下,运行:

  1. checksdk -list
用于检查SDK的安装情况,除了默认安装的几个SDK外,你还会找到一个自己刚才安装的AM335xSDK (ARMv4I)
  1. checksdk -sdk "AM335xSDK (ARMv4I)" -script tmp.bat
  2. tmp.bat
这两个命令是配置接下来编译的SDK路径,也有其他的办法来配置,这个办法比较简单。

7. cd到qt-wince484目录下,运行:

  1. nmake
开始编译,五个字母折腾我两天,如果编译失败了可以修改问题后再次执行nmake,不需要clean工程,如果必须要clean时,使用`nmake confclean`命令。
nmake下报错好几个,我后边会记录。

最后,你就可以通过打开VS2008,new一个新的QT4工程,选择wince项目,选择对应的SDK,新建工程成功了。

配置联机

注意要复制到工业屏的flash部分。我复制到了\HardDisk\Windows\下。

打开vs2008-tools-options中,选择Devices,在Show devices for platform中选择Windows CE,再点Properties,选择Configure,选择Use specific IP address,填入工控机的IP,完毕OK。参考:https://support.microsoft.com/zh-tw/kb/2663904

双击工业屏上的ConmanClient2.exe,会创建一个信息文件。然后双击CMAccept.exe,不会有任何反应。
此时,在开发机上打开VS2008,Tools菜单-连接设备,选择SDK,联机。
如果3分钟内没有联机成功,就要重新双击CMAccept.exe。

对于win10,联机时不需要安装任何软件,安装过Windows Mobile 设备中心,但无法正常工作,后来在一个帖子里说,win10的Windows Mobile 设备中心是内置的,叫做同步中心,总之按我上边所说的可以正常联机,没有问题。

遇到的问题

以上几个小节已经讲解了环境配置的整个过程,下边我将自己遇到的问题做总结。

不用多说,必须用英文版,用中文版会在nmake上遇到问题。如果不使用QT那就随意,我试过,中文版2008可以通过MFC开发应用程序并在工业屏上部署,但好习惯还是用英文版的最好。

最初认为工业屏上运行的是wince6.0,最后发现是WEC7,这个也要注意,主要影响qt配置sdk部分,如果你用的是其他版本的wince,那请自己去查找mkspecs目录下的子文件夹,选择对应的平台,如果哪个平台都不对应,可以参考QT官方的指南,这一篇:Windows CE - Working with Custom SDKs,去自己搭建配置,也很简单,其他相关的文章也可以参考。

网上说只能4.7.3能用,也有说4.6.4能用,也有用4.8.4的,新一点的帖子都有用5.5的,似乎都可以,我没试过。但一定注意下载要完全。

注意,现在qt的官方是:www.qt.io,虽然qt几经易主,但依然很受欢迎,相关的文档去这里:doc.qt.io,下载去这里:download.qt.io/archive/,不要去官方给的download处下载,会绕很远,而且找不到4.x的版本。
也可以去这里下载:http://ftp.vim.org/languages/qt/archive/qt/4.6/

重下一个就好了,这个下载时丢失掉数据了。

如果你喜欢用setcepaths.bat来配置SDK路径,而不是我上边用的checksdk.exe生成的tmp.bat,也可以,但请注意:
使用前,要将setcepaths.bat打开,将里边对应的checksdk.exe的SDK改为你的SDK名称,打开后就会发现,其实这个也是通过chcksdk来实现的,只不过是一个方便一些的脚本,我倒没感觉方便多少。

如果使用直接set PATH=...set LIB=... set library=...的,我觉得太麻烦,就没用,应该也能行。

这个也困扰我一段时间,一定要修改qmake.conf中那两个值,改为自己SDK名称,不改会有问题。如果自己对应的平台下qmake.conf中基本是空的,那就把其他平台下的qmake.conf中的内容复制过来,修改,这个我没试过,但是似乎再多改一下DEFINES这项就行。具体怎么改还是自己去查吧。

报错1:

  1. qaccessible_win.cpp文件中,,winable.h找不到该文件或目录。

(这个错误信息忘记保存了,大概是这个意思)
解决办法:
在vs2008中,winable.c winable.h已经不再支持,当然找不到,已经被winuser.h替代。
我们打开qaccessible_win.cpp文件,定位到出错处,可以看到winuser.h默认已经被include了,在第56行左右,即#ifndef WINABLEAPI这句的前边,写:

  1. #define WINABLEAPI

也就是让他不执行#ifndef WINABLEAPI的内容就可以。

另外,还需要修改winable.h中,搜索CHILDID_SELF字段,将这个字段改为0。

报错2:

  1. c:\qt\qt-wince484\src\3rdparty\javascriptcore\javascriptcore\runtime\JSArray.h(149) : error C2668: 'std::min' : ambiguous call to overloaded function
  2. C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\include\xutility(3373): could be 'const _Ty &std::min<unsigned int>(const _Ty &,const _Ty &)'
  3. with
  4. [
  5. _Ty=unsigned int
  6. ]
  7. c:\Qt\qt-wince484\src\3rdparty\javascriptcore\JavaScriptCore\wtf/Platform.h(555): or 'T std::min<unsigned int>(const T &,const T &)'
  8. with
  9. [
  10. T=unsigned int
  11. ]
  12. while trying to match the argument list '(unsigned int, unsigned int)'
  13. JSCallbackConstructor.cpp

解决办法:
命名空间冲突了,要把qt带着的这个注释掉。
将Platform.h中555行注释掉,同时注释掉554行。

其他都是警告,不影响使用,我也没太多时间去处理,直接略过了。

上文说过qt option时会出错,错误是:
在vs2008-tools-qt-qt option选项中,选择qt-wince路径后,保存退出,提示:

  1. the platform "AM335xSDK" is not defined within visual studio

我当时查看了好多论坛,以及好多外国论坛里都有人问这个问题,因为大家的SDK已经正确安装,在VS2008中安装是正确的,可以找得到,但qt配置就是不正常。
最后的解决办法是从bbs.meizu.cn/thread-1552735-1-1.html中找到了灵感,会不会有大小写的区别?
将qmake.conf中
CE_SDK = AM335xSDK
CE_ARCH = armv4i
改为
CE_SDK = AM335xSDK
CE_ARCH = ARMv4I
后再添加就正常了。

参考网址

感谢以下网址对我的帮助:

developer.toradex.com的英文教程(这里只列出一个):http://developer.toradex.com/knowledge-base/how-to-setup-development-environment-for-wince-and-vs2008#Visual_Studio_2008

doc.qt.io官方的英文教程(这里只列出一个):http://doc.qt.io/qt-4.8/install-wince.html

微软官方的教程(这里只列出一个):https://support.microsoft.com/zh-tw/kb/2663904
http://blog.csdn.net/abc19abc91/article/details/10233987

http://www.voidcn.com/blog/educast/article/p-1202792.html

http://www.voidcn.com/blog/educast/article/p-1202798.html

http://blog.csdn.net/ibingow/article/details/7252517

http://www.qtcn.org/bbs/apps.php?q=diary&a=detail&did=1312&uid=123236

http://blog.sina.com.cn/s/blog_6987a97e0100w47y.html

http://www.qtcn.org/bbs/simple/?t11920.html

http://www.qtcn.org/bbs/simple/?t24222.html

写了2个小时,终于总结完了,眼睛疼,谢谢各位。

最后一直有一个疑问,AM3352是ARM Cortex-A8内核的芯片,架构应该是ARMv7,但是前边编译qt的时候用的是ARMv4i,请问这个ARMv4i和ARMv7能兼容吗?

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注