ppc2003移植到wm5.0 易犯错误

最近在看一个demo,是在vs2005下面的ppc2003上用c++编写的,而我用的平台是wm5.0的,所以修改了配置平台,试试运行(以前也在wm5.0上运行过ppc2003的程序,没有问题),可是就出现问题。记录如下,

一、当只是修改了平台时,

报错:

警告 warning LNK4068: 未指定 /MACHINE;默认设置为 X86                                             

fatal error LNK1112: 模块计算机类型“ARM”目标计算机类型“X86”冲突

查找原因:

所使用的外部*.obj是X86机型的,而正在编译的目标是ARM机型。应该从新将外部*.obj编译成ARM机型的。

解决方法:链接器 -> 命令行 -> 附加选项, 添加  /MACHINE:ARM

二、报错:

fatal error LNK1112: 模块计算机类型THUMB目标计算机类型”ARM”冲突

参看:http://www.rushlife.cn/?p=120

解决办法:
1.新建项目时,在”平台”->”选择要添加到当前项目中的 Platform SDK。”中,把”已安装的 SDK”全部添加到”选定的 SDK”
2.在”属性页”->”配置属性”->”链接器”->”命令行”中的”附加选项”里,有如下命令:”/subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE”,在其后加入命令:” /MACHINE:THUMB”,即附加选项现在内容为:” /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE /MACHINE:THUMB”,确定即可.

我的修改后是:/subsystem:windowsce,5.01  /machine:ARM /ARMPADCODE /MACHINE:THUMB

 

三、可是又来了一堆错误

 

 咨询别人,得知没有添加lib,于是查找,原来ppc 2003有的lib,转换成mobile 5.0后就没有了,又重新添加了lib

属性-〉c/c++ -〉常规->附加文件目录  和  链接器-〉常规-〉 附加库目录

添加demo相应的lib路径

 

四、错误,又是错误

fatal error LNK1104: 无法打开文件“secchk.lib”

搜索:msdn上的讨论:http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesnative/thread/fadf321d-25bd-4e8f-856c-e015066d155c/

看得我云里雾里的,没看明白,在pc机上搜索,发现这个文件的路径在:

Program Files/Microsoft Visual Studio 8/SmartDevices/SDK/PocketPC2003/Lib/armv4

是ppc2003的文件,于是复制到项目文件下试试,果真,没有这个错了,换了一个

fatal error LNK1104: 无法打开文件“ccrtrtti.lib”

同样在ppc2003,再复制过来,可以运行了,没有错误,只有警告

这两个文件相关的pdb(相同路径下),然后把pdb复制到项目下,程序运行,没有警告。

 

五、别人的经验

Ⅰ  移植PB的代码到VS2005的一次经历

http://mobilesir.spaces.live.com/Blog/cns!48C02BAA1CD51400!229.entry

开发环境:
 1.vs2005
 2.Windows mobile  2003/5.0
注意:
1.打开VS2005->项目属性->c/c++->代码产生->Buffer Security Check ->NO/(GS)
然后编译,成功.
不打开(激活)缓冲保护,可以顺利在VS2005中编译先前的EVC代码.
因为基于CE4.2 (WM2003)系统里没有安全函数,而VS2005默认/GS编译先项
是打开的,主要是为了防止代码缓冲区益出,提高安全性。
所以我们要在VS2005中编译先前的EVC代码,可以用这种方法。但不推荐
,请用下面方法。
2。打开VS2005->项目属性->链接器->命令行->加入secchk.lib
然后编译,成功。
填加secchk.lib,就是为了在基于CE4.2 (WM2003)系统里填加了安全函数
不必关闭VS2005的/GS编译选项。虽然生成代码多了1K,但这也是值得的。
因为secchk.lib提高安全性,有效防止缓冲区益出。推荐用此方法在VS2005
编译基于CE4.2 (WM2003)的EVC代码。

 

Ⅱ  PPC程序低版本到高版本移植的问题

 http://seraphim-zhai.spaces.live.com/blog/cns!B842D90502D29D25!287.entry

在msdn完整的说法是,建议在迁移evc的project时,
 Ignore Specific Library(忽略特定库) 加上 oldnames.lib
AdditionalDependencies
(附加依赖项)加上 commctrl.lib coredll.lib aygshell.lib secchk.lib ccrtrtti.lib

其实针对wm5.0的做法是:
编译选择ARM4,可以不起用混合调用,然后linker中的Target Machine选择Not Set

 

Ⅲ Manually migrate Embedded Visual C++ workspace to Visual Studio 2005 (Beta 2) without using Migration Assistant (Upgrade Wizard) 后的相关评论

http://windowsmobilepro.blogspot.com/2005/08/manually-migrate-embedded-visual-c.html

Yes, all my 20+ projects were actually manually migrated and build successfully. Just a reminder: "secchk.lib" and "ccrtrtti.lib" are only needed if you are building for Pocket PC 2003 and Smartphone 2003 platform. They are not needed for 5.0 platforms.

I do not use MFC, just straight C++ and Windows Mobile API. I do not think there is any problem in migrating MFC classes, as I found the following lib files for MFC:
C:/Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/lib/

The MFC source code is also shipped as usual. Under a parallel directory you can find the MFC runtime DLLs. One thing you need to pay attention is that few 5.0 devices actually ship MFC runtime so you have to install it yourself.

 

都试试了,没有用,不知道是不是修改的问题。

下一步,理解demo的结构,自己编一个程序。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值