lnk2005

   今天使用vs2003en开发一个项目,在debug编译、执行的时候都正常,但是在今天提交版本的时候,突然发现在做Release时,出现lnk2005错误(提示为new重复定义),我在工程中找了半天,也没发现有错误,后来Yahoo了一下,说是在连接的时候,和mfc和clr库连接的顺序错了,才导致出现重复定义的错误。后来把mfc方式改为“Use MFC in a Shared DLL”后,错误消失。当把工程做好后,拿到其他的机器上测试。更郁闷啊,出现了如下所示的错误,

  唉,缺少库文件,结果把msvcr71d.dll,msvcp71d.dll,mfc71d.dll,mfc71.dll这四个文件考到生成的执行文件的目录下,就可以了。


一个.NET程序在编译和运行时都做了些什么?
================================================================
在新闻组和邮件列表里有大量关于一个.Net程序的设计编译(design-time or
run-time)和运行原理 (CPU-specific binary or pseudo-code)的疑问。

这里是一个简单的回答:当你编译一个C#应用程序或任何一种CLS(Commmon
Language Specification)兼容的语言时,它将首先被编译成一种称为IL
(Intermediate Language)的伪代码(pseudo-code)。在这个应用程序第一次
被运行的时候,这种IL代码将被编译成机器代码,用于执行。也就是说从源代码
到得到运行结果,进行了两次编译。事实上,只有那些被真正使用的函数代码
才会被进行第二次编译。下面揭示开发过程中被隐藏起来的细节:

1) 你用C#开发一些程序
2) 用C#编译器或CLS兼容的编译器编译成EXE
3) 编译器将生成的IL代码和附加信息(manifest)放入拥有一个标准PE头的Win32
可执行文件的只读部分。
4) 编译器在创建这个可执行文件时导入(import)一个名为_CorExeMain的函数。
这个函数是.NET EE(execution engine)--.NET运行期引擎的入口函数。
5) 当执行这个Win32可执行文件时,因为其主要是依赖于DLL的PE文件,操作系
统将会调用位于MSCorEE.DLL中的_CorExeMain函数。
6) 操作系统通过PE文件里的进入点,饔肕SCorEE.DLL。并能保证在Windows里
可以有很多程序同时运行。
7) 因为操作系统不能执行.NET IL代码,EXE里的进入点只是简单的中介,它将
指示操作系统调用_CorExeMain函数。
8) 随后_CorExeMain函数开始解释位于PE文件中的IL代码。
9) 因为IL是不能被直接执行的, .NET EE使用称为JITter (Just In Time compiler)
的即时编译器将IL代码编译成本地CPU机器代码用于执行。这一即时编译过程
只在第一次执行的时候进行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值