vs中c和c++运行库

四种运行库在VS的项目属性-》C/C+±》代码生成-》运行库:

在调试模式下,使用调试运行库:多线程调试(/MTd)、多线程调试DLL(/MDd)

在发布模式下,使用发布运行库:多线程(/MT)、多线程DLL(/MD)

静态链接:多线程(/MT)、多线程调试(/MTd)

动态链接:多线程DLL(/MD)、多线程调试DLL(/MDd)。

1、MT和MD的区别:

链接的运行时库不同。对于多线程MT的程序来说,其连接的是libcmt.lib,该文件属于C语言运行时库,整个lib都会连接到PE文件当中。而多线程MD的程序链接的却是类似msvcpXXX.dll,该文件属于微软运行时库.也就是说如果是多线程MD编译出来的文件运行时都会加载相应版本的运行时库,当如果找不到运行时库就会报错而无法运行,同时如果运行时库不匹配也会出现各种意料之外的崩溃或者程序根本跑不起来等情况。
编译出来的PE文件大小区别。此时如果两者作为对比就会很明显看到多线程MT编译出来的文件体积要比多线程MD编译出来的大,因为MT是把对应的运行时库直接放到编译出来的PE文件当中,而MD却是运行的时候从第三方dll中获取运行时库,自己本身却不包含。同时另外的区别也很明显,多线程MT编译出来的文件运行时不需要加载第三方dll所以运行效率要比多线程MD稍微高一点点,当然作为用户是完全感觉不到的。所以说如果打开一个程序目录,发现里面有类似msvcrtXX.dll,那么这个程序几乎可以肯定是用多线程MD方式编译的。

2、lib和dll的区别

使用lib需注意两个文件:

•.h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
•.LIB文件。

使用dll需注意三个文件:

•.h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
•.LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误(如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载)。lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
•dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。

生成lib文件

右键点击工程,并选择工程属性,出现下图,选择静态链接库即可。

在这里插入图片描述

build solution即可产生lib文件,在Debug中只生成.lib文件。

生成dll文件

生成dll文件的过程与上面的过程是一样的,只是在选择Dynamic Library(.dll)即可。在Debug中会生成一个.lib和.dll两种文件。

两种文件的使用

在使用时,静态链接库只要把.h和.lib文件加入到工程文件夹中即可。而动态链接库要把.h、.lib和.dll文件加入到工程中。​​​​​​​要调用.dll库文件中的函数,首先要在c/c++附加包含目录dll对应的.h文件,然后在链接器中包含响应的.lib文件,最后要把.dll文件放在.exe相同目录下。

3、Debug和Release的区别

Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息

Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。 Release模式下生成一个文件.exe或.dll文件

    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)

4、sln是解决方案文件,

为解决方案资源管理器提供显示管理文件的图形接口所需的信息

sdf (SQL Server Compact Edition Database File)文件,是工程的信息保存成了数据库文件,如果你没有参加大型的团队项目,不涉及到高深的调试过程,这个文件对于你来说没什么用了,可以放心的删除,如果你后来又需要这个文件了,简单,打开工程里的.sln文件重新编译链接就ok了

vcxproj文件:工程文件,其中描述了工程的各项属性,修改该文件后再重新build时vs会重新build工程

vcxproj.filter文件:可理解为视图文件,定义了工程在VS中打开后的目录结构,修改该文件后重新build时vs不会重新build工程

你有没有遇到过这样的情况: 重装了系统后(安装原版或者某种定制版系统),直接运行重装系统前已经用过的 QQ、迅雷 等软件出现报错或者不能运行;又或者有一些绿色软件,直接运行会出现报错的提示,不能正常运行。 原因很可能是系统缺少了这些软件需要依赖的库文件,导致它们不能正常运行(比如 QQ 迅雷 需要依赖 VC++ 库,有些绿色软件需要依赖 VC++ 库或 VB 库)。遇到这类情况,要不就直接重装 QQ 或 迅雷 等的官方原版软件,要不就把相关的运行库复制到系统中。 这个“常用运行库”包的就是为了解决这类问题而生的,原版系统自带的运行库比较旧且数量少,而这个包则涵盖了目前各个版本的运行库常用的控件,可以起到增强系统的作用。 这是装完系统后必装的东西,就像Flash插件以及DirectX一样! 否则你用原版系统,精简系统,绿色软件,精简软件...等,总提示缺少... 如果你已经安装了部分,也可直接安装,会自动跳过已安装过的运行库. 本工具可以解决重装了系统后(安装原版或者某种定制版系统),直接运行重装系统前已经用过的 QQ、迅雷 等软件出现报错或者不能运行;又或者有一些绿色软件,直接运行会出现报错的提示,不能正常运行。 本工具就是为了解决这类问题而生的,原版系统自带的运行库比较旧且数量少,而这个包则涵盖了目前各个版本的运行库常用的控件,可以起到增强系统的作用。 Microsoft VB/VC Runtime Library Build 201009 notes: Visual Basic Virtual Machine (5.1) Visual Basic Virtual Machine (6.0) Microsoft C Runtime Library (7.0) Microsoft C Runtime Library (7.10) Microsoft Visual C++ 2005 SP1 (8.0.59193) Microsoft Visual C++ 2008 SP1 (9.0.30729) Microsoft Visual C++ 2008 ATL Update kb973924 (9.0.30729.4148) 更新说明: 2010-9-17 更新部分VC7.0文件 2010-2-12 更新VC8.0ATL补丁 2010-1-15 更新VC8.0至59193
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值