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 Files\Microsoft Visual Studio 8\VC\redi

st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:



msvcm80d.dll

msvcp80d.dll

msvcr80d.dll

Microsoft.VC80.DebugCRT.manifest



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



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



6、采用Release模式,不要采用Debug模式就可以了

试过第一个,确实可以。

VS2005下开发PPC2003和WM50编译器一些设置的更多相关文章

  1. Linux (Ubuntu12.04) 下开发工具安装和使用

    Linux (Ubuntu12.04) 下开发工具安装和使用 这里讲述的是关于在ubuntu12.04下面安装和使用各种IDE 开发环境和初步使用的知识.说一下背景:很多的开发基本都是在linux操作 ...

  2. 在VS2010下开发C语言程序

    妈蛋,我发现VS下开发C语言,并不是把文件名改成.C的就行了.VS2010不支持C99.  也就是函数局部变量声明必须放在函数的开头.难怪,我从Linux下移植过来的.c工程怎么是编译错误呢,发现是变 ...

  3. vs下开发windows服务程序

    一. VS2012下开发Windows服务 1. 打开VS2012,新建项目,选择Windows服务,此处我以开发一个定时自动发送邮件的服务来做介绍,如下图: 2. 创建好后,编译器会自动创建一些文件 ...

  4. java入门---windows和Linux,UNIX,Solaris,FreeBSD下开发环境配置

        首先来看Windows下的操作.我们需要下载java开发工具包JDK.下载地址:http://www.oracle.com/technetwork/java/javase/downloads/ ...

  5. gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  6. Linux下开发STM32单片机

    一开始学习51单片机就是用的MDK这个IDE软件,IDE软件虽然看起来直观好像更加容易入门(因为有界面看起来很形象),但是实际上IDE却是向我们这些入门人员隐藏了背后真实存在的过程,让我们以为编译就是 ...

  7. OS X下开发!ios系统贪食蛇!——from cocos2d-x 3.0

    前几天用cocos2d-x写了个贪食蛇!这次是全然在osx下开发的.基本的思路是这种我建立了一个Snake类,当中有两个构造函数一个是用于存放蛇身体sprite的图片和Snake的X坐标和Y坐标.另外 ...

  8. Python在Windows下开发环境配置汇总

    最近比较关注学习Python方面的资料和课程,由于Python本身基本都是在Linux下开发,本人windows用习惯了初用Linux各种别扭啊. 下面将我在配置Windows环境下的禁言写出来,与大 ...

  9. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

随机推荐

  1. JavaScript正则实战

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  2. 使用CSS修改HTML5 input placeholder颜色( 转载 )

    问题:Chrome支持input=[type=text]占位文本属性,但下列CSS样式却不起作用: input[placeholder], [placeholder], *[placeholder] ...

  3. js判断屏幕分辨率的代码

    通过下面的代码判断分辨率 <script language="JavaScript"> <!-- Begin function redirectPage() { ...

  4. 思道OA PK 通达OA 同场竞技 谁与争锋

    技术架构 思道OA 通达OA 开发语言 微软ASP.NET 4.0 PHP开源脚本语言 64位平台 64位 32位 数据库 SQL Server大数据库 MySQL开源数据库 官网下载 下载地址 下载 ...

  5. Spark Streaming揭秘 Day22 架构源码图解

    Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreamin ...

  6. java之StringBuffer

    StringBuffer就是字符串缓冲区,用于存储数据的容器. 特点:长度可变,可存储不同类型的数据,最终转化成字符串使用,可以对字符串修改 功能: 添加:append(value), insert( ...

  7. 《C和指针》 读书笔记 -- 第13章 高级指针话题

    1.函数指针 int (*f)(); int *(*f[])(); 用途: [1]回调函数 e.g. /*在一个单链表中查找指定值*/ Node *search_list(Node *node,voi ...

  8. easyui 多行文本框 Multiline TextBox

    <input class="easyui-textbox" data-options="multiline:true" value="This ...

  9. Unity3d之Socket UDP协议

    原文地址:http://blog.csdn.net/dingkun520wy/article/details/49201245 (一)Socket(套接字)UDP协议的特点 1.是基于无连接的协议,没 ...

  10. 【bzoj3110】[Zjoi2013]K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置 ...