在 vs/c# 项目开发中,经常会遇到 lib 和 dll 文件,而且创建工程项目以及工程项目打包时也是必须要面对的,所以有必要掌握 lib 和 dll 的区别和使用。

  • 静态库:在链接步骤中,连接器将库文件取得所需的代码,复制到生成的可执行文件中,这种库叫做静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令全部被直接包含在最终生成的exe文件中。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件。

  • 动态库:动态库链接是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行的文件,动态库提供一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL中包含一个或者多个已经被编译,链接并使用它们的进程分开存储的函数,在vs中新建生成动态库的工程,编译成功后,产生一个.lib和一个.dll文件。

  • 静态库的lib:该lib包含函数的代码本身(包括函数的索引,也包括实现),在编译 的时候将代码加入程序当中

  • 动态库的lib:该lib包含了函数所在的DLL文件和文件中函数位置的信息,函数实现代码由运行的时候加载在进程空间中DLL提供,总之,lib是编译的时候用到的,如果完成源代码的编译,只需要lib,如果要使得动态库的程序运行起来,只需要dll。

静态库.a(win下是lib) 和动态库.so(win下是.dll),所谓静态,动态是指链接,回顾下,将一个程序编译成可执行的步骤:



静态库在程序编译的时候会被链接到目标代码中,程序运行的时候不需要该静态库

静态库特点:

静态库对函数库的链接是放在编译期完成的,程序在运行的时候与函数库再无瓜葛,移植方便。

缺点:浪费空间与资源,因为所有相关的目标文件与牵扯到的函数库会被合成一个可执行的文件。

是静态库对程序的更新,部署和发布会带来麻烦,如果静态库更新,所有使用它的应用程序程序都需要重新编译,发布给用户。

动态库特点:

动态库把一些库函数的链接载入推迟到程序运行的时期,可以实现进程之间的资源共享。

将实现进程之间的资源共享,将一些程序升级变得简单。甚至可以真正做到链接载入完全由程序代码中控制(显示调用)

lib 的调用

c# 不能直接调用 lib 库,需要将其打包为 dll 才能调用

dll 的调用

将 dll 文件拷贝到工程 debug 文件下即可(如果不拷贝,编译链接不报错,运行报错:无法找到***.dll)

工程调用 dll 方法举例

[DllImport("user32.dll", EntryPoint="MessageBoxA")]
static extern int MsgBox(int hWnd, string msg, string caption, int type);

VS 中的 lib 和 dll 的区别和使用的更多相关文章

  1. 摘:LIB和DLL的区别与在VC中的使用

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

  2. 【转】CV_EXPORT定义的作用,lib及dll的区别

    http://blog.csdn.net/viewcode/article/details/8021989 在core.hpp中,CV_EXPORT是出现频率最高的词之一. 1. CV_EXPORT是 ...

  3. LIB和DLL的区别与使用

    转这篇文章是因为以前有个误区,以为lib为静态库,dll为动态库,这理解并不错,但不全面.lib分两种的:(1) lib包含所有内容的静态库,应用程序用它即可,这是我理解的一种(2) lib只包含头部 ...

  4. C/C++ 知识点---LIB和DLL的区别与使用(网摘)

    LIB和DLL的区别与使用 原文出处:[远风工作室] 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dyna ...

  5. C++:LIB和DLL的区别与使用

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

  6. windows环境下lib和dll的区别和联系详细

    https://blog.csdn.net/ghevinn/article/details/43759655 c++中共有两种库:1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代 ...

  7. (转)LIB和DLL的区别与使用

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

  8. windows下LIB和DLL的区别与使用

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

  9. lib和dll的区别,生成(转)

    首先介绍下静态库(静态链接库,.lib文件),动态库*(动态链接库,.dll文件)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件,这 ...

随机推荐

  1. 201871030139-于泽浩 实验二 个人项目D{0-1} KP

    201871030139-于泽浩 实验二 个人项目D{0-1} KP 项目 内容 课程班级博客连接 2018级卓越班 这个作业要求连接 软件工程个人项目 我的课程学习目标 (1)掌握软件项目个人开发流 ...

  2. docker之镜像配置

    以管理员sudo执行以下命令 docker ps -a 查看镜像的id docker exec -it 镜像id /bin/bash -i表示交互模式 -t表示启动容器进入命令行 加入这两参数,容器创 ...

  3. spieces-in-pieces动画编辑器

    前言: 制作灵感来源于 http://species-in-pieces.com/ 这个网站,此网站作者是来自阿姆斯特丹的设计师 Bryan James,其借用纯CSS技术表现出30种濒危动物的碎片拼 ...

  4. Web安全实践

    目录 前言 编码安全 反序列化命令执行 SQL 注入 跨站 XSS(Cross-site scripting) 跨站请求伪造 CSRF(Cross-site request forgery) URL跳 ...

  5. phpstorm2017 激活方法

    1.license server 在线激活方式 不是很推荐,自己有服务器的话可以考虑搭建 以下地址可以用一下,不保证长期有效 http://idea.goxz.gq http://v2mc.net:1 ...

  6. php将IP地址转换为真实地址的方法

    方法使用示例如下 define('WEB_ROOT',dirname(__FILE__)); echo convertip('111.63.244.69','full'); func converti ...

  7. hdu2371 矩阵乘法(求序列位置改变m次后的序列)

    题意:       给你一个字符串,然后让你执行m次操作,每次操作把当前的字符串映射到他给你的位置序列的位置,比如给的是 3 1 2,第一步就是把原来的3的位置的字母变到1的位置,1的变到2的位置,2 ...

  8. Windows核心编程笔记之处理字符串

    0x01 ANSI 和宽字符定义 // ANSI 字符定义 CHAR varChar_1 = 'a'; // #typedef char CHAR CHAR varChar_2[] = "A ...

  9. Web中的相对路径和绝对路径

    前台路径:浏览器端发起的资源请求路径 后台路径:服务器端发起的资源请求路径

  10. Spring Boot集成sharding-jdbc实现分库分表

    一.水平分割 1.水平分库 1).概念:以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中.2).结果每个库的结构都一样:数据都不一样:所有库的并集是全量数据: 2.水平分表 1).概念以字段 ...