lib和dll

lib和dll文件的区别和联系

.dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。

.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:

1 包含一个对应的头文件告知编译器lib文件里面的具体内容

2 设置lib文件允许编译器去查找已经编译好的二进制代码

如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。

一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:

extern "C"

{

#include "myheader.h"

}

这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。

dll是个编译好的程序, 调用时可以直接调用其中的函数, 不参加工程的编译. 而lib应该说是一个程序集, 只是把一些相应的函数总结在一起, 如果调用lib中的函数, 在工程编译时,这些调用的函数都将参加编译. 简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。 做成静态库可执行文件本身比较大,但不必附带动态库 做成动态库可执行文件本身比较小,但需要附带动态库 其它没有什么对于程序员而言很大的区别 有的Unix可能不支持动态库,所以只好用静态库 DLL与LIB的区别: 1.DLL是一个完整程序,其已经经过链接,即不存在同名引用,且有导出表,与导入表 lib是一个代码集(也叫函数集)他没有链接,所以lib有冗余,当两个lib相链接时地址会重新建立,当然还有其它相关的不同,用lib.exe就知道了 2.在生成dll时,经常会生成一个.lib(导入与导出),这个lib实际上不是真正的函数集,其每一个导出导入函数都是跳转指令,直接跳转到DLL中的位置,这个目的是外面的程序调用dll时自动跳转 3.实际上最常用的lib是由lib.exe把*.obj生成的lib,这才是真正的.

使用.LIB时要包含头文件,再链接上相应的.LIB库

使用.DLL时就可以直接在程序中装载.DLL库,不需要包含头文件什么的

它们都是动态库吧

.lib是和.dll对应的,   不是单独的库.

你编译和连接的时候都不用.dll,   所以编译的时候要用头文件,   连接的时候用.lib,   运行的时候用.dl

(1)lib是编译时需要的,dll是运行时需要的。

如果要完成源代码的编译,有lib就够了。

如果也使动态连接的程序运行起来,有dll就够了。

在开发和调试阶段,当然最好都有。

(2) 一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么 对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编 译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新 的应用程序才行。

(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际 的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不 是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资 源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。

转载于:https://www.cnblogs.com/sunliming/archive/2011/11/07/2238917.html

lib和dll文件的区别和联系(集合了几个博客的内容)相关推荐

  1. lib和dll文件的区别和联系

    什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)      (1)lib是编译时需要的,dll是运行时需要的.  如果要完成源代码的编译,有lib就够了.  如果 ...

  2. 批量生成HTML文件,通过 学生名单(学号、姓名) 与 博客名单(姓名、网址)

    批量生成HTML文件,通过 学生名单(学号.姓名) 与 博客名单(姓名.网址) 构想 很早就想写这个程序了,知道开学3周多了,才下定决心写完. 功能:通过 学生名单(学号.姓名) 与 博客名单(姓名. ...

  3. 运行eclipse.exe文件安装时弹出网页 【两牛博客--知足且坚定,温柔且上进】

    运行eclipse.exe文件安装时弹出网页 [两牛博客--知足且坚定,温柔且上进] 问题描述 问题分析 解决方案 问题描述 官网下载eclipse安装文件 官网下载地址:https://www.ec ...

  4. Windows程序中的Lib和Dll文件

    共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含 ...

  5. Java相对路径调用dll文件,VS项目中调用他人提供的.lib和.dll文件的用法(绝对路径和相对路径)...

     开发平台:vs2013 他人提供的动态库文件,包含 .lib 文件和 .dll 文件 在VS的工程中常常要设置头文件的包含路径和库文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只 ...

  6. .dll、.lib、.dll.a 的区别

    我们已 ffmpeg 的动态链接库为例,描述一下这三个文件的作用: 目录整体结构: 分析 bin 目录: ffmpeg.ffplay.ffprobe 之所以这么小,是因为他们运行的时候会调用 .dll ...

  7. VS2012+OpenGL (涵盖GLUT+GLEW+FreeGlut+GLTools) h lib 和dll文件

    本人参考的是这位大神的博客:http://k57box.blog.163.com/blog/static/14226137420146144357635/(明明是个中文网站,我却要翻墙才能上) 好吧不 ...

  8. .net core 文件流保存图片_使用JSDelivr加速Github、博客文件

    前言:当我们博客添加了本地视频或者大量图片等等,会导致加载时间过长,这里我们用JSDelivr对其进行加速,相当于免费的的CDN. 一.新建一个GitHub仓库 仓库名称随便 仓库属性Public,不 ...

  9. linux给文件夹腹权限,文件的权限_腹有诗书气自华的技术博客_51CTO博客

    1.文件与目录属性 # ls -l filename###文件属性查看 -rwxr-xr-x.2rootroot     6Oct  2 09:42file 第一列:文件类型和文件权限 如果这一位上有 ...

最新文章

  1. 高通5G版图现身!你的网络生活将迎来巨变?
  2. 关于python中程序流程结构-Python程序结构
  3. python编程入门经典实例-Python编程语言入门经典案例
  4. 定义结构体的时候,里面的变量可以同时初始化吗?(不可以)
  5. 2014年百度之星程序设计大赛 - 资格赛 1004 Labyrinth(Dp)
  6. windows安装Python模块:requests
  7. Angular reducer第一次被框架调用的单步调试细节
  8. 传感与检测实验报告,差动变压器的特性测定,江南大学物联网自动化
  9. 详解Microsoft Office Communication Server (OCS) 2007 标准版部署(上)
  10. 常用数据库学习资源站点
  11. linux系统漏洞修复2019,Linux中 OpenSSH 输入验证错误漏洞(CVE-2019-16905) 修复解决方案...
  12. Android-JNI开发系列《十》实践利用libjpeg-turbo完美压缩图片不失真
  13. 40个国内外文献免费下载网站-转
  14. 使用可道云kodexplorer和ONLYOFFICE创建您的WebOffice云办公系统
  15. js数组按中文拼音排序_这才是选择排序正确的打开方式!
  16. C# 火星文转化 算法 dictionary 的使用案例
  17. 加快打造“云上贵州”,靠大数据实现“后发赶超”
  18. 【深度学习模型】讲讲横扫nlp任务的BERT模型
  19. 【超融合】超融合“火不火”?
  20. Java poi导入合并单元格的excel数据【最完整】附pom文件和excel截图

热门文章

  1. python knn-基于python实现KNN分类算法
  2. hbuilderx 2.9.8 公用css样式_浅谈关于vue中scss公用的解决方案
  3. java获取年初年末_Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间...
  4. php请求aspx,PHP用curl函数POST请求到ASP页面提示无效请求
  5. 计算机集中器的原理图,集中器,集中器原理是什么?
  6. hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
  7. Redis持久化存储详解(一)
  8. 『原创』用C++开发WM应用系列(6)——深化ListBox控件
  9. Spark PruneDependency 依赖关系 RangePartitioner
  10. openlayers 根据style设置显示级别并在字体加背景框