build program for hpc 2.02

来源:互联网 发布:乐视网络电视下载安卓 编辑:程序博客网 时间:2024/06/11 11:37

在关注pda的时候,同时我也在关注另外一种机器:Handheld PC,这种机器有点像sub notebook,但是搭载的是wince的系统,机器的特点就是大屏幕(480×240,800×600),配备键盘,甚至带pcima卡的卡槽。一开始关注是由于nec的10寸大屏幕的机器r700,售价仅仅280RMB,心动了好几次,结果真的有机会买的时候,却因为那批货的充电器只能供电不能给电池充电而失之交臂。

在这个过程中,商贩们还炒作了另外一个机器:Philip Velo 500。它是480×240的分辨率 ,单色,绿色背光 ,75Mhz mips cpu 16M ram ,只能扩展vleo的内存模块。当时对这个机器并不在意,因为键盘的布局很差,使用的时候要像小鸡啄米一样。

某一次在论坛闲逛,偶尔发现有人在叫卖自己的velo 500,售价150。一时兴起,google了一把velo 500的资料。意外的发现有人在velo 500上面安装linux,虽然只是一个shell,没有xwindow,但是一下子让自己提起了兴趣。也难怪,那时候也在眼馋sharp的zaruas 系列呢,后来也买下了sl 5600c,这是后话。 当下,联系了卖家,通过网络付了款,第二天在公司的时候就收到了机器。

拿到机器以后,粗略的浏览了一番,里面安装了cestar汉化了系统,有一个钢琴游戏,一个金山词霸的字典,还有一堆系统自带的office软件 word excel powerpoint什么的。 然后接下来的一段时间都没有动过这个机器,以至于,最后备用电池被耗尽,数据全部丢失,回到了初始的英文界面。

偶尔找来备份文件,通过红外,经历了2个小时,终于又一次让机器回复了中文。看着备份出来的软件,总觉得缺了些什么,于是决定打造一个开发环境,即使不是自己写也要为这个机器编译一点出来。

安装从微软免费下载的EVT3.0,新建hello world 工程,然后选择cpu mips,类型hpcpro,编译成功,拷入机器运行,居然直接报错不能运行。一下傻了眼,再次google,才发现原来velo用的是wince2.0而不是hpcpro的wince2.11,而evt提供的sdk只有wince2.11的,看来还是要重新寻找工具。

这次不用google,直接跑去微软的主页,一路寻找,找到了handheld pc sdk2.0的下载,赶快下载下来一路安装,心想这下总可以成功,结果开启EVC却发现依然没有心爱的HPC选项出现。继续研究,才发现微软提供的sdk是for tookit for visual c++ 而不是直接给evc用的。无奈只好接着google。

也许是因为太老的东西,所以微软抛弃的同时,也被大家共同抛弃。搜索了无数的页面始终没有看到一丝有用的数据。

无意中打开了sample目录,发现每个例子下面都有一个makefile,总算又一次有了希望,没有ide,用命令行难道也不成吗?

没在windows下用过makefile,习惯性的跑进目录运行make,结果当然是make为错误的命令,又研究了一把,揪出了nmake这个老家伙,配置好path,运行,果然顺利的编译成exe文件。一运行程序,x86模拟器启动,然后载入刚刚编译出来的程序,一切运行正常。可是问题又来了,怎么才能变为mips的程序呢?打开makefile文件,没写过makefile的我有一次傻掉了,一堆看不懂的东西。从头到尾阅读了一番,大概了解了其含意,试着将x86改为mips  windows改为windowsce,结果报出一堆问题,郁闷一番。

接下来的google结果不尽如人意,尝试了各种关键字,可是丝毫没有什么帮助。于是只好苦闷的试着继续修改makefile,但是还是没有起色。于是跑到论坛、qq群询问,结果要么是没人理睬,要么就是中国特色的一个“顶”字,不过话说回来csdn从“关注”回归到“顶” 不知道算进步还是退步呢。

接下来的时间,我大概都是在google中度过的,除了工作吃饭就是google。终于让我发现了一些东西,能够让我使用EVC进行创建应用程序的方法:

install HPC Pro SDK e.g. to "d:/windows ce tools". 
install HPC SDK (version 2.0) to "d:/windows ce tools" as well 
made a copy of "d:/windows ce tools/wce211/ms hpc pro" for backup (for future restoration of HPC Pro SDK) 
delete "d:/windows ce tools/wce211/ms hpc pro/lib/arm" and "d:/windows ce tools/wce211/ms hpc pro/lib/sh4" directories, (there are no versions for WinCE 2.0) 
copy contents of "d:/windows ce tools/wce/lib/wce200/hpc/wcemips" over the contents of "d:/windows ce tools/wce211/ms hpc pro/lib/mips" 
copy contents of "d:/windows ce tools/wce/lib/wce200/hpc/wcesh" over the contents "d:/windows ce tools/wce211/ms hpc pro/lib/sh3" 
copy contents of "d:/windows ce tools/wce/lib/wce200/hpc/x86em" over the contents "d:/windows ce tools/wce211/ms hpc pro/lib/x86em" 
copy contents of "d:/windows ce tools/wce/include/hpc" over the contents "d:/windows ce tools/wce211/ms hpc pro/include" 
rename directory "c:/program files/microsoft embedded tools/evc/wce211" to "c:/program files/microsoft embedded tools/evc/wce211-backup" 
rename directory "c:/program files/microsoft embedded tools/evc/wce200" to "c:/program files/microsoft embedded tools/evc/wce211" 
E) If you choose HPC Pro 2.11 platform in eVT, your type of processor and build a program, it compiles for WinCE HPC 2.0. Move file to your Handheld and try it. Attention! MFC libraries are not included in the "cut off" SDK, that's why you must use only API functions. Choose "WCE Application" as a new project.

F) The compiler warned that parameter "/MC" is unsupported. To suppress this select menu Project-Settings, choose C/C++ tab an remove parameter /M$(CECrtMT) in the Project Options.

G) If you need to develop for WinCE 2.11, you must restore HPC Pro SDK! 

方法很简单,也很奏效,不足有如下两点:1 破坏了hpcpro的环境,是否有问题不能确定 2 模拟器只能启用hpcpro的,这个分辨率也不对。 不过优点也很明显:可以用evc开发。

虽然已经得到了自己想要的东西,但是就想《特洛伊》里面说的:每个男人都想得到,我想得到更多。所以我又埋头google之中,寻找makefile的解决方案。

这段时间真的是茶不思饭不想,以至于豆豆开始很怨的说我不理她。终于在今天,还是让我找到了解决的方法。

呜乎哀哉,原来从一开始我的方向就是错误的。我企图用cl.exe加入特定参数来生成mips代码,原来微软专门提供了clmips.exe 来进行交叉编译。废话也不说什么了,下面就直接贴出x86版本的makefile和mips 版本的

x86:

SAMPLE=hello
RCFILE=$(SAMPLE)
CC=cl.exe
LINK=link.exe

#CDEBUG=-DDEBUG=1 -Zi -Fd$(SAMPLE).pdb
#LDEBUG=-debug -debugtype:cv -pdb:$(SAMPLE).pdb

LIBS=coredll.lib msvcrt.lib ole32m.lib oleautm.lib htmlview.lib commctrl.lib

CDEFINES=-DUNDER_CE -DUNICODE -D_UNICODE -DWIN32 -DSTRICT /
 -Dx86 -Di486 -D_X86_ -D_WIN32_WCE=200 /
 -D_WIN32_WCE_EMULATION -DUSA /
 -DINTLMSG_CODEPAGE=1252


LDEFINES=-nologo -subsystem:windows -incremental:no /
         -out:$(SAMPLE).exe -machine:x86 -nodefaultlib -entry:WinMainCRTStartup /
         $(LDEBUG) $(LIBS)

all: /
 $(SAMPLE).exe

clean: /
 ; /
 del /Q *.obj *.res *.exe

$(SAMPLE).exe: /
 $(SAMPLE).obj ; /
 $(LINK) $(LDEFINES) /
 $(SAMPLE).obj


$(SAMPLE).obj: /
 $(SAMPLE).cpp ; /
 $(CC) $(CDEFINES) $(CDEBUG) -c /
 $(SAMPLE).cpp


mips:

SAMPLE=hello
RCFILE=$(SAMPLE)
CC=clmips.exe
LINK=link.exe

#CDEBUG=-DDEBUG=1 -Zi -Fd$(SAMPLE).pdb
#LDEBUG=-debug -debugtype:cv -pdb:$(SAMPLE).pdb

LIBS=commctrl.lib coredll.lib

CDEFINES=-DUNDER_CE -DUNICODE -D_UNICODE -DWIN32 -DSTRICT /
 -DMIPS -D_MIPS_ -D_WIN32_WCE=200 /
 -DUSA /
 -DINTLMSG_CODEPAGE=1252


LDEFINES=-nologo -subsystem:windowsce -incremental:no /
         -out:$(SAMPLE).exe -machine:MIPS -nodefaultlib -entry:WinMain /
         $(LDEBUG) $(LIBS)

all: /
 $(SAMPLE).exe

clean: /
 ; /
 del /Q *.obj *.res *.exe

$(SAMPLE).exe: /
 $(SAMPLE).obj ; /
 $(LINK) $(LDEFINES) /
 $(SAMPLE).obj


$(SAMPLE).obj: /
 $(SAMPLE).cpp ; /
 $(CC) $(CDEFINES) $(CDEBUG) -c /
 $(SAMPLE).cpp

要注意的有如下几个:

1 _WIN32_WCE_EMULATION  只有在x86模拟器的时候使用

2 如果是mips  clmips.exe  -DMIPS -D_MIPS_  x86em则cl -Dx86 -Di486 -D_X86_

3 link 方面 machine 和subsystem  

   mips:-machine:MIPS -subsystem:windowsce 并且-entry:WinMain 

   x86  则使用 -subsystem:windows  -machine:x86 -entry:WinMainCRTStartup

4  最后就是需要link的lib   x86en 和mips还是不一样的要指定到不同的目录