解决办法:
1.新建项目时,在"平台"->"选择要添加到当前项目中的 Platform SDK。"中,把"已安装的 SDK"全部添加到"选定的 SDK"
2.在"属性页"->"配置属性"->"链接器"->"命令行"中的"附加选项"里,有如下命令:"/subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE",在其后加入命令:" /MACHINE:THUMB",即附加选项现在内容为:" /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE /MACHINE:THUMB",确定即可.
以上两种方法,是在两个不同的项目中遇见的,该帖提问时遇见的问题是通过第一种方法解决的,但最近又遇见同样问题,第一种方法无效,第二种能够解决.
http://hi.baidu.com/alalmn/blog/item/27fff22a1739e525d42af114.html
网上下载的的代码原在它自己的Smartphone 2003 ARMV4 模拟器中可以运行,而我装了ARM4I的SDK后debug一直都出错:
module machine type 'THUMB' conflicts with target machine type 'ARM'
找了很多资料:
如:
Q:fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM' 如何解决?
我将一个pocketPC2003(ARM4)的工程移到ARM4I的一个SDK平台下编译,出现错误.无论C++ ->Advance 和Linker->Advance如何设置,都会出现如下错误:fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'请高手忙吗?
问题补充:
Linker > Advanced ->target machine 设置成 MachineTHUMB(/MACHINE:THUMB)没有用啊,错误还是会出现
Q:将一个Win32的Windows mobile 2003 SE for Samrtphone工程,配置为Windows Mobile 6.0 for Profssional工程,编译的时候出现如题的问题。
A:修改如下:
Project properties -> Linker->Command Line->Additional Options中的:/machine:ARM修改为: /machine:THUMB。搞定,通 过编译而且能够在WM 6.0 for Professioal 模拟器上运行。
三 (摘自http://www.cnblogs.com/lookou/)
Link error 1112
首先说ARM4 ARM4T 和 ARM4I,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才会出现的,直接建立对应的工程而不进行转换是没有这个问题的。
四(摘自http://topic.csdn.net/u/20080526/15/12df0120-de67-45cb-8aae-708ac153439c.html)
Q: 我设置自己的SDK就出现这个错误: module machine type 'THUMB' conflicts with target machine type 'ARM' 使用PPC 2003的就可以,这个是怎么回事?
A1:你自己的SDK CPU类型是ARM4还是ARM4I
A2:首先确认你的sdk的cpu类型。 在project-setting-linker-command line下,删除'THUMB'
Q: 问题解决了,方法是修改link command,把ARM改为THUMB
五(论坛内容省略)
摘自http://topic.csdn.net/u/20080703/17/ca002ba6-1ddb-4333-bb13-78f3b457b1b3.html
我最后的解决:
project / configuration properties / linker / Advanced /Target machine :Not set
或者
project / configuration properties / C++ / Complie for Architeture : ARM4 (/QRarch4)
project / configuration properties / C++ / Interwork ARM and ARM Thumb calls : yes
project / configuration properties / linker / command line / 中修改/subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE为/subsystem:windowsce,4.20 /machine:THUMB /ARMPADCODE
就OK了。其实不明白为什么!
然后我自己测试在
第一种:其他保持不变的情况下随便改变了
project / configuration properties / linker / Advanced /Target machine : MachineARM (/MACHINE:ARM) 或者MachineAM33 (/MACHINE:AM33)或者MachineMIPS (/MACHINE:MIPS) 或者MachineIA64 (/MACHINE:IA64)都可以 ,不知道是不是与这个没关系。
第二种:
其他不变的情况下:
/subsystem:windowsce,4.20 /machine:THUMB /ARMPADCODE 删除 /ARMPADCODE 居然也可以通过
这些也有提到
http://seraphim-zhai.spaces.live.com/
http://www.cnblogs.com/homesmile/archive/2008/12/25/1362372.html
http://seraphim-zhai.spaces.live.com/