Visual C++运行库DLL介绍
acmilan2017/01/06软件综合 IP:四川

Visual C++的正统做法是使用DLL版本运行库。运行库分发方法有两种,一种方法是直接附带DLL,另一种方法是使用vcredist_x86.exe。

如果不想使用DLL版本运行库,而是想静态编译的话,可以更改项目属性,将Release版/MD开关改为/MT,Debug版/MDd开关改为/MTd。但是静态编译有限制,不能跨DLL申请或释放堆内存,也不能使用/clr编译为托管程序集。

Visual C++ 2015微软作了一个死,导致在Windows XP/7/8.1等老系统上需要附带一堆DLL。如果不想附带这么多DLL,有三种方法:

  • 静态编译
  • 使用vcredist_x86.exe
  • 改用Visual C++ 2013

Visual C++ 2005/2008(以2008为例)

Release版:C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\x86\XXXXXXXXXXXXXXXXXT

Debug版:C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\XXXXXXXXXXXXXXXXXbugCRT

以Release为例,一共有四个文件:

  • XXXXXXXXXXXXXXXXXXXXXnifest——并列配置清单文件,必须附带
  • msvcr90.dll——C运行库
  • msvcp90.dll——C++运行库
  • msvcm90.dll——C运行库托管(.NET)导入库

其它文件夹还有:

  • MFC/ATL相关运行库

Visual C++ 2010/2012/2013(以2012为例)

Release版:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\redist\x86\XXXXXXXXXXXXXXXXXXT

Debug版:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\redist\Debug_NonRedist\x86\XXXXXXXXXXXXXXXXXXbugCRT

以Release为例:

  • msvcr110.dll——C运行库
  • msvcp110.dll——C++运行库
  • vccorlib110.dll——应用商店运行库(VC++2012/2013)

其它文件夹还有:

  • vcomp110.dll——OpenMP运行库
  • vcamp110.dll——C++AMP运行库(VC++2012/2013)
  • MFC/ATL相关运行库

Visual C++ 2015

VC++2015对C/C++运行库进行了巨大的改造,分成了两部分:C/C++运行库和Universal CRT DLLs。在Windows XP/7/8.1上需要第一部分和第二部分,在Windows 10上仅需要第一部分。

C/C++运行库

Release版:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\XXXXXXXXXXXXXXXXXXT

Debug版:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\Debug_NonRedist\x86\XXXXXXXXXXXXXXXXXXbugCRT

  • vcruntime140.dll——C运行库
  • msvcp140.dll——C++运行库
  • vccorlib140.dll——应用商店运行库
  • concrt140.dll——并发运行库

其它文件夹还有:

  • vcomp140.dll——OpenMP运行库
  • vcamp140.dll——C++AMP运行库
  • MFC/ATL相关运行库

Universal CRT DLLs(获取这些DLL需安装Windows 10 SDK 10586+)

Release版:C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

Debug版:C:\Program Files (x86)\Windows Kits\10\bin\x86\ucrt

  • Release版DLL需要全部附带
  • Debug版需要使用ucrtbased.dll替换ucrtbase.dll
<code class="language-txt">api-ms-win-core-console-l1-1-0.dll
api-ms-win-core-datetime-l1-1-0.dll
api-ms-win-core-debug-l1-1-0.dll
api-ms-win-core-errorhandling-l1-1-0.dll
api-ms-win-core-file-l1-1-0.dll
api-ms-win-core-file-l1-2-0.dll
api-ms-win-core-file-l2-1-0.dll
api-ms-win-core-handle-l1-1-0.dll
api-ms-win-core-heap-l1-1-0.dll
api-ms-win-core-interlocked-l1-1-0.dll
api-ms-win-core-libraryloader-l1-1-0.dll
api-ms-win-core-localization-l1-2-0.dll
api-ms-win-core-memory-l1-1-0.dll
api-ms-win-core-namedpipe-l1-1-0.dll
api-ms-win-core-processenvironment-l1-1-0.dll
api-ms-win-core-processthreads-l1-1-0.dll
api-ms-win-core-processthreads-l1-1-1.dll
api-ms-win-core-profile-l1-1-0.dll
api-ms-win-core-rtlsupport-l1-1-0.dll
api-ms-win-core-string-l1-1-0.dll
api-ms-win-core-synch-l1-1-0.dll
api-ms-win-core-synch-l1-2-0.dll
api-ms-win-core-sysinfo-l1-1-0.dll
api-ms-win-core-timezone-l1-1-0.dll
api-ms-win-core-util-l1-1-0.dll
api-ms-win-crt-conio-l1-1-0.dll
api-ms-win-crt-convert-l1-1-0.dll
api-ms-win-crt-environment-l1-1-0.dll
api-ms-win-crt-filesystem-l1-1-0.dll
api-ms-win-crt-heap-l1-1-0.dll
api-ms-win-crt-locale-l1-1-0.dll
api-ms-win-crt-math-l1-1-0.dll
api-ms-win-crt-multibyte-l1-1-0.dll
api-ms-win-crt-private-l1-1-0.dll
api-ms-win-crt-process-l1-1-0.dll
api-ms-win-crt-runtime-l1-1-0.dll
api-ms-win-crt-stdio-l1-1-0.dll
api-ms-win-crt-string-l1-1-0.dll
api-ms-win-crt-time-l1-1-0.dll
api-ms-win-crt-utility-l1-1-0.dll
ucrtbase.dll
</code>

[修改于 7年11个月前 - 2017/01/11 23:04:11]

来自:计算机科学 / 软件综合
4
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan 作者
7年11个月前 修改于 7年11个月前 IP:山东
829347
引用 amo:
我还在用老古董VC6,没有这些烦恼……
其实是因为Windows 2000以后VC6运行库msvcrt.dll变成了Windows内部DLL(KnownDLL)的原因。msvcp60.dll和msvcirt.dll虽然还带,但是系统并没有使用,因为编译器早就换了几代了,C++不兼容了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
7年11个月前 IP:山东
829352
现在感觉还是C#好用,C++标准库是非常弱的,平台和图形编程主要依赖框架,但是每一个框架都不可以互相移植,而且都是年久失修的状态。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
7年10个月前 IP:内蒙古
830017
VC++6.0的DLL
msvcrt.dll——C运行库
msvcirt.dll——上古C++使用的iostream运行库
msvcp60.dll——标准C++运行库

VC++.NET2002/2003的DLL(以VC++.NET2003为例)
msvcr71.dll——C运行库
msvcp71.dll——C++运行库
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年10个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}