zoukankan      html  css  js  c++  java
  • VS2005下开发PPC2003和WM50编译器一些设置

    1、vs2005开发WM5时,编译器和linker的选项配合问题

        链接:http://www.mivi.name/blog/index_en.php?itemid=258

    首先说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&siteid=1&sb=0&d=1&at=7&ft=11&tf=0&pageid=1 
    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 
    这样就可以编译通过不报任何错误了。。。

    2、fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'

        解决方法:

    在WinCE下编程时,常常出现上述错误可以在Project->Setting->Link下将MACHINE:X86改成MACHINE:ARM,如果还不行,直接改为MACHINE:THUMB.

     

    3.WM5.0下,fatal error LNK1112:错误解决方法

      将工程从Pocket PC 2003转到Windows Mobile5.0 Pocket PC SDK下,就会出现coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM',解决方法:ALT+F7打开工程设置,在Configuration Properties->Linker->Command Line,在Additional options:把原来的 /subsystem:windowsce,4.20 /machine:ARM /ARMPADCODE删除,输入 /subsystem:windowsce,5.01就可以,注意此种方法仅适用由VC8.0所建的工程,并不适用于由EVC建的工程转到WM5.0下。

    4.在VS 2005中建立的Win32工程总出现这样的运行错误:"MSVCR80D.dll not found"

    转:http://www.cppblog.com/pengkuny/archive/2007/03/21/20332.html
    在VS 2005中建立的Win32工程总出现这样的运行错误:"MSVCR80D.dll not found"
    好几次了,总结各种解决方法如下:

         原因:(不知道在说啥)由于VS.net 2005 采用了一种新的DLL方案,搞成一个exe还要配有一个manifest文件(一般在嵌入文件里了,所以看不到,不过也可以不嵌入,这样会生产一个<程序名>.exe.manifest的文件,没它exe自己就转不了了:)这是个新功能,微软弄了个新工具(mt.exe),结果不好用,好像是fat32下时间戳有问题(在ntfs下这个问题就没有了),搞得manifest有时嵌入不到exe中(默认配置是嵌入的,所以就报错找不到 dll了。

          解决方法:(任选一个即可)
    1.生成Debug版本项目时,未打开连接器的/MANIFEST开关。在 'Project Properties->Configuration Properties->Mainfest Tool->Input and Output->Embed Manifest' 将 YES 改成 NO 就可以了.

    2.在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。

    3、如果建立的是Win32的项目的话可以在项目-(项目名)属性-配置属性-C/C++-代码生成-运行时库 将其改为多线程调试 /MTd

    4、在C:Program FilesMicrosoft Visual Studio 8VC edi
    stDebug_NonRedistx86Microsoft.VC80.DebugCRT 下找到了下列文件:

    msvcm80d.dll
    msvcp80d.dll
    msvcr80d.dll
    Microsoft.VC80.DebugCRT.manifest

    把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以运行那个程序了。

    5、将Debug版本中第一次生成的.res文件删除后重新Build一次

    6、采用Release模式,不要采用Debug模式就可以了
    试过第一个,确实可以。

  • 相关阅读:
    信号学习第一课--基础知识
    进程学习第一课--基本操作
    执行sql语句后的数据处理api
    如何持续改善你的开车技术?
    刹车失灵不用怕 常见故障分析及应对方法
    原地打方向原来很伤车?看完还敢吗?
    这儿有四个开车小细节,新手司机一定要牢记
    毁车隐患多 真正的老司机绝不会这样停车
    80%的事故发生在这些路段!想保命快点我
    流言终结者!自动挡用车误区,你可能每天都在犯错
  • 原文地址:https://www.cnblogs.com/liang123/p/6325614.html
Copyright © 2011-2022 走看看