选择正确的C/C++ runtime library
本文是对http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html的翻译,如有错误,还请指正
c/c++运行库(runtime library)包括许多基本的功能,像内存分配、输出和字符串操作(复制、计算长度)等等
当建立了一个c/c++的应用程序或库时,你必须选中c/c++运行库,在vs2005中,你可以这样选中这种按钮:Project->Properties...->Configuration Properties->C/C++->Code Generation->Runtime Library:
这里有4种选择:
1 多线程(/MT)
2 多线程调试(/MTD)
3 多线程动态链接库dll(/MD)
4 多线程动态链接库调试(/MDD)
c++的运行库依赖于c的运行库。c的运行库版本必须和c++的运行库版本匹配。因此,这些选项应用于c和c++的运行库中。
在之前vs的版本中,这些都是单线程的。那些版本会比多线程的执行的速度更快。但是,在多线程的应用程序中,用他们并不安全。我想,单线程库在减少是因为多核现在已经成为普遍的存在。而且多线程应用程序需要利用多核。
(In previous versions of Visual Studio, you had additional options that were single-threaded. These versions would execute faster on a single core than the multi-threaded versions. However, they were not safe to use in a multi-threaded application. I'm guessing these libraries were dropped since multiple cores are quickly becoming ubiquitous and multi-threaded applications are needed to take advantage of these extra cores.)
这两种变量会有四种选择
- 调试版本(debug) vs 发布版本(release)
- 动态链接库(dll)vs 静态库
第一种变量很简单,在不交给顾客的内部软件中应用调试版。调试的运行库不能合法的包含你的应用程序。这么说吧,你不能将软件的debug版本交给顾客。它应该是运行库的release版本
debug运行库让你会的一些有用的调试帮助,比如错误报告和跟踪内存泄露,想了解更多的debug功能,请看http://msdn.microsoft.com/en-us/library/zh712wwf%28VS.80%29.aspx
下一个变量就是动态链接库(dll)或静态库了。通常来说,我们应当使用dll,当出现下面请看时,你可以考虑静态库版本:
- 你有一个小的应用程序,你不想浪费内存让运行库调用一些你不想要的东西上面
- 你想要一个简单的应用程序不依赖于额外运行库的dll
当你的应用程序不需要其他库时这些指令运行的非常好。但这很少发生。在应用程序中使用多余一个运行库版本Microsoft列出了几点模糊的警告在他们的文档里。
目的就是在你的整个应用程序里只使用一种运行库。
但这几乎不可能因为因为你对别的类库用了什么库时没有权限的。比如说,openGL(open graphic library)需要使用类库。如果你的应用程序或是使用的其他类库没有和openGL使用同样的类库,那么你就在同时用着几个类库。
我们怎么知道某个exe,dll,lib,obj使用了哪个类库呢,使用下面这条命令:、
dumpbin /all XXXX | find /i "msvcr"
XXX表示你想知道的exe/dll/lib/obj
想知道运行的结果代表什么,可参照:http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx
如果你什么也没得到,很可能你现在用的是一个静态库。
甚至在你知道用的是哪个运行库,你会发现要使得应用程序只用一个运行库也是不可能的。如果如果你匹配运行库,会发现,有可能一个类库用的是vs7.0的版本(msvct.dll)但是你只能访问vs8.0的类库。
所以,除了某些特定情况,类库混在一起用关系不大。一个好的类库应该避开这些情况,然后类库匹配的时候就没多大关系了。
选择正确的C/C++ runtime library的更多相关文章
- CRT (C run-time library)
一 产生 运行时库是程序在运行时所需要的库文件,通常以LIB或DLL形式提供. C运行时库就是C run-time library,诞生于20世纪70年代,是C而非C++语言世界的概念,C程序运行时需 ...
- <转>C Runtime Library(MSVCRT)来历
(转载)C Runtime Library(MSVCRT)来历 msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy ...
- Microsoft Visual C++ Runtime Library Runtime Error的解决的方法
打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...
- Microsoft Visual C++ Runtime Library Runtime Error解决的方式
打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...
- C Runtime Library来历, API, MFC, ATL关系
首先说明,我google了半天,想找到英文的关于这个资料,但是实在找不到,只好转载国人的讨论. CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行.后来 ...
- 【转】C Runtime Library的来历
由于我看到的文章也是转载且未提供原文链接,所以这里没有提供原文链接! msvcrt.dll(名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy ...
- C Runtime Library、C Runtime
C Runtime Library.C Runtime 1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些 ...
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- (转)C# 选择正确的集合
原文: http://www.cnblogs.com/luminji/archive/2011/03/24/1993393.html 要选择正确的集合,我们首先要了解一些数据结构的知识.所谓数据结构, ...
随机推荐
- 《PHP框架Laravel学习》系列分享专栏
<PHP框架Laravel学习>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201735.html 文章 Laravel教程:l ...
- C/S与B/S 区别以及优缺点
1.什么是C/S结构 C/S (Client/Server)结构,即客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现 ...
- C# 面试题 (二)
1. 什么是C#? C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.C#是一种安全的.稳定的.简单的.优雅的,由C和C++衍生出来的面向对象的编程语言. ...
- 苏州Uber优步司机奖励政策(1月4日~1月10日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 三 Hive 数据处理 自定义函数UDF和Transform
三 Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...
- 【费元星】crt 无法上传文件,总是显示盾牌表示-完美解决
将如下内容保存到文件中,已.bat 结尾 taskkill /f /im explorer.exeattrib -s -r -h "%userprofile%\AppData\Local\i ...
- Qt-QML-C++交互实现文件IO系统-后继-读取XML文件和创建XML文件
在前面两篇中,大致完成了一个文件IO的读和写操作.前面两篇文章链接 http://blog.csdn.net/z609932088/article/details/71488250 http://bl ...
- 180713-Spring之借助Redis设计访问计数器之扩展篇
之前写了一篇博文,简单的介绍了下如何利用Redis配合Spring搭建一个web的访问计数器,之前的内容比较初级,现在考虑对其进行扩展,新增访问者记录 记录当前站点的总访问人数(根据Ip或则设备号) ...
- Linux命令应用大词典-第17章 软件包管理
17.1 rpm:RPM软件包管理器 17.2 rpmargs:处理RPM软件包 17.3 rpmbuild:构建RPM软件包 17.4 rpmdiff:比较两个软件包之间的不同 17.5 rpmel ...
- lintcode174 删除链表中倒数第n个节点
删除链表中倒数第n个节点 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点. 注意事项 链表中的节点个数大于等于n 您在真实的面试中是否遇到过这个题? Yes 样例 给出链表1->2 ...