作者:朱金灿

来源:http://blog.csdn.net/clever101

我们有时会遇到R6034错误,工程明明编译通过,但是运行时却出现:

网上的解决办法很多,但是有效的不多,特别是对阐述这个问题的本质的很少。今天就这个问题谈谈我的粗浅看法,不当及不全面地请大神们赐教。大家知道,操作系统是处在硬件和应用程序之间的一个中间层。应用程序运行时需要用到的库称为运行时库,运行时库相当于操作系统和应用程序之间的一个小的中间层。VC编出来的程序需要的运行时库成为VC运行时库,如MSVCR90.dll等。

其实微软提供的VC运行时库是有很多版本的。为什么需要这么多的运行时库?原因很多,主要有下面两个:一是为了不同的处理器厂商和硬件架构,比如amd和intel,比如x86和x64等等;二是为了适配不同VS版本,比如VS2003、VS2005、VS2008等等,即使同是VS2008,VS2008和VS2008+sp1的运行时库都是不一样的。如何保证开发者的VC程序链接的是正确的VC运行时库?微软就想了一个招,在编译VC程序时开发者可以生成一个清单文件,这个清单文件记录你实际需要链接的哪些版本的运行时库,然后这个清单文件可以嵌入到你的应用程序,当程序启动时根据这个清单文件去寻找你所需要的运行时库。

VS编译程序时可以选择是否生成和嵌入这个清单文件,具体编译选项如下图:

到这里就明白了为啥了会产生R6034的错误了,就是你的应用程序链接到了错误的运行时库,至于为什么链接到了错误的运行时库,原因是应用程序没有潜入清单文件,因为没有精确指定,系统就默认你链接的是system32下的vc运行时库。

因此要避免R3034的错误,最好是在编译程序时选择生成和嵌入这个清单文件。在Win7系统下,系统已经自带了很多版本的运行时库,具体位置在:C:\Windows\winsxs。在xp系统还没有自带多个版本的运行时库,所以一般需要安装注册VS运行时库。

最新文章

  1. Windows下的Objective-C集成开发环境(IDE)(转)
  2. linux shell脚本通过参数名传递参数值
  3. netty-socketio使用namespace
  4. BZOJ1770 : [Usaco2009 Nov]lights 燈
  5. Linux 计划任务 Crontab 笔记与总结(4)crontab 的日志
  6. iOS开发--TableView详细解释
  7. GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in.
  8. Azure上A/D系列虚拟机到DS系列迁移(2)
  9. 我的第一个python web开发框架(18)——前台页面与接口整合
  10. /dev/null 2>&1 详解
  11. elasticSearch+spring 整合 maven依赖详解
  12. iptables 从一台机到另一台机端口转发
  13. 【刷题】LOJ 556 「Antileaf's Round」咱们去烧菜吧
  14. Codeforces 711D Directed Roads - 组合数学
  15. python函数名称
  16. SpringJMS解析--使用示例
  17. Node单线程高并发原理
  18. 谷类 cereal
  19. oracle查看用户表
  20. Python中的变量和常量

热门文章

  1. scratchIDE使用说明
  2. Android平台Camera实时滤镜实现方法探讨(九)--磨皮算法探讨(一)
  3. Jmeter添加响应断言
  4. java 获取类路劲注意点
  5. 51nod-1131: 覆盖数字的数量
  6. 使用OpenCV把二进制mnist数据集转换为图片
  7. SFTP的使用
  8. WinDBG help
  9. CentOS7.4-btrfs管理及使用
  10. JAVA程序类加载及其反射机制