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模式就可以了
    试过第一个,确实可以。

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298613.html
Copyright © 2011-2022 走看看