ARM4是纯32位的ARM,ARM4T是纯16位THUMB,ARM4还有一个分支ARM4I,是16位和32位混合的
ARM5则是向下兼容的,运行ARM4的程序没问题
在开发和编译Windows Mobile 5.0(ARM4I)的程序时,你也许碰到过如下的错误(PocketPC2003你不会碰到这个问题):
coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type ‘THUMB’ conflicts with target machine type ‘ARM’
说lib文件的THUMB模式与ARM模式不兼容
编译器的选项:
Project | Properties | Configuration | C++ | Advanced | Compile for Architecture
有选项ARM4 和 ARM4T
Project | Properties | Configuration | C++ | Advanced | Interwork ARM and ARM Thumb Calls
有选项是否允许混合ARM和THUMB调用(即ARM4I)
编译器的选项
Project | Properties | Configuration | Linker | Advanced | Target Machine
有选项MachineARM 和 MachineTHUMB
根据参考网页:
http://forums.microsoft.com/msdn/showpost.aspx?postid=122058
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=195585&SiteID=1
的说法,似乎编译WM5的程序时,必须选择的搭配是ARM4T+MachineTHUMB
但是实际使用 发现 如果开启允许混合调用的选项,ARM4或者ARM4T的选项无所谓,但是MachineType仍然必须是MachineTHUMB
而参考VS2005自己生成的Project,以及早期VS2005在beta版本时期的一个MSDN文档,
其实针对wm5.0的做法是:
编译选择ARM4,可以不起用混合调用,然后linker中的Target Machine选择Not Set
这样就可以编译通过不报任何错误了。。。虽然不知道为啥
微软论坛上说疑似一个bug。。。呵呵
转载修改自:http://www.mivi.name/blog/index_en.php?itemid=258#nucleus_cf
从我个人的测试结果,上面所提及的两项内容:Compile for Architecture 和Interwork ARM and ARM Thumb Calls两个选项都必须修改,程序才能够正常运行。而以上的这个问题是在先用WinCE 2003建立工程后,转换成Windows Mobile 5才会出现的,直接建立对应的工程而不进行转换是没有这个问题的。