lib和dll文件的初了解

lib,dll这两样东西在许多编程书中都很少出现,但实际工程中,这两样东西的作用确实非常重要,我觉得c++程序员都有必要了解这两样东西。



首先总共有 动态链接 和 静态链接 这两种链接方式

静态链接:

静态链接使用静态链接库lib,且只在源代码编译时用到(编译期)。
编译生成静态库时会生成一个.lib文件
.lib里面装载了各种类,函数的实现。
这种静态链接的lib实际上是多个obj文件的集合。

为什么需要静态链接?

在实际工程中,往往各模块的规模庞大(一堆.h .cpp文件)
而编译时,每个.cpp对应生成.obj文件,一个模块生成一堆obj文件,瞬间把文件夹塞满,造成维护的不便性
为了解决这问题,可以将每个主要模块先编译成一个.lib文件,再使用静态链接的方法,在编译期将各模块的.lib的文件链接起来。

动态链接:

动态链接使用动态链接库dll,且只在程序启动时用到(运行期)
编译生成动态链接库时会生成一个.dll文件和一个.lib文件

.dll存放了各函数,.exe刚开始运行时就会动态链接上所需的.dll文件(运行期)

.lib则一般是一些索引信息,记录了dll中函数的入口和位置(跟静态链接库的lib不同),不过仍然只在编译期用到(编译期)

为什么需要动态链接?

由于.dll存放了各函数,.exe里无需再存放.dll已含有的函数,只需调用时存放相应的函数地址,这样可以将.exe的空间大小转移一部分给.dll。
在大型软件的更新中,如果更新一个庞大的exe文件,负担想必是极大的。如果仅针对其中某几个.dll更新,则可以减少更新的大小。提高灵活性。
缺点还是有的,在程序刚开始运行时,程序会动态链接n个.dll,这个操作需要花时间。
(某些大型游戏,点开图标后,半天都不把程序弹出来,大概也有这个原因- -||)

原文地址:https://www.cnblogs.com/KillerAery/p/9097541.html

时间: 2024-10-02 00:11:39

lib和dll文件的初了解的相关文章

关于.h,.lib,.dll文件

1 .h文件: (1) .h只做声明,编译后不产生代码,#include 完全等价于把 .h 文件拷贝 到 .c 中: (2)函数定义要放在.c中,而.h只做声明.否则多引用几次,就会发生函数重复定义的错误: (3)C文件是编译器运行的最小单位,每个C文件会被编译成一个独立的目标文件(二进制):——obj文件 (4)连接器是以目标文件为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终的可执行文件: tips: (1)只有声明没有定义,编译阶段不会报错: (2).h声明的函数必然能在编

lib和dll文件的区别和联系

什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. (2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有 dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib

[转]windows下VS2010中lib与dll文件的生成与使用

原文地址:https://my.oschina.net/SysuHuyh5LoveHqq/blog/644622 近期在windows下开发了某个程序,需要将其生成静态文件(lib)以及动态库文件(dll),其中参考了不少帖子,有的讲得也不是很清楚明白,先将本人实践过的记录一下,供后期自己查询,也供各位大牛点评. 一.lib文件的生成与使用 1.lib的生成 相对来说,静态库文件还是比较容易生成和使用的,在代码上,貌似也不需要更改什么,举例说明: 头文件函数声明形式如下: extern bool

vs2010下lib和dll文件的使用

一.lib文件的简介 .lib是一种文件后缀,是Windows操作系统的库文件,有静态lib和动态lib之分: 1).静态lib 文件:将导出的文件的声明和实现都放在lib文件中,此时lib 文件主要包含函数的实现部分(cpp文件) ,例如类的函数定义.使用时只需配 合相关的头文件,编译后程序将lib 文件中的代码嵌入到宿主程序中,也就是最后的exe文件中,此时移除lib 文件,程序可以正常运行,即编译后就不需要lib文件的支持了. 2).动态lib文件:相当于是一个h头文件,用于支持相应的dl

深入理解DLL文件

1.LIB与DLL文件的区别 DLL是一个完整的程序,称为“动态链接库”,DLL中包含的主要有三块内容:1.全部变量 2.函数接口 3.资源:DLL中有一个函数导出表,其中每一项都是一个函数名称.通过一定的方式连接这些函数接口,来调用这些函数的功能. dll有两种加载方式:隐式链接和显式链接. dll一般会有对应的导入库,方便程序进行隐式链接加载,否则就需要自己LoadLibary调入DLL文件,然后再GetProcAddress获得对应函数了(即显示链接加载dll方式).有了导入库,你只需要链

使用VS2012生成DLL文件 (1)

一:生成DLL 1:创建DLL工程 文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以) 填写项目名称MyDLL->确定->下一步->DLL(附加选项 对空项目打钩)->完成. 到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h. MyDLL.cpp内容如下: 1 #include  2 using namespace std; 3 #include "M

LIB文件和DLL文件的作用

(1)lib是编译时需要的,dll是运行时需要的.如果要完成源代码的编译,有lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有.(2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中.静态编译的lib文件有好处:给用户安装时就

CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径

使用CMAKE管理工程,可以设置工程中的INSTALL项目运行时安装的路径,使用命令:install. 可以简单的设置安装文件的路径和文件夹: set(head_files //要安装的头文件 ) install(TARGETS ${head_files} DESTINATION ${CMAKE_BINARY_DIR}/include) install(TARGETS myLib DESTINATION ${CMAKE_BINARY_DIR}/Lib) 上述设置方法会将Lib文件和DLL文件安装

.lib文件 .h文件 .dll文件

.lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开的,不能查看编译过后的文件. lib有静态lib和动态lib之分. 静态lib将导出声明和实现都放在lib中,即包含函数代码本身,编译后所有代码都嵌入到宿主程序. 动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明.编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的d