什么是Lib

2024-09-08 11:38
文章标签 lib

本文主要是介绍什么是Lib,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概念

LIB有两种:

  • 一种是静态库,比如C-Runtime库,这种LIB中有函数的实现代码,一般用在静态连编上,它是将LIB中的代码加入目标模块(EXE或者DLL)文件中,所以链接好了之后,LIB文件就没有用了。
  • 一种LIB是和DLL配合使用的,里面没有代码,代码在DLL中,这种LIB是用在静态调用DLL上的,所以起的作用也是链接作用,链接完成了,LIB也没用了。至于动态调用DLL的话,根本用不上LIB文件。 目标模块(EXE或者DLL)文件生成之后,就用不着LIB文件了。

       静态lib文件实际上就是任意个obj文件的集合,而obj文件就是cpp文件编译之后产生的一种文件,一个cpp文件编译之后只会产生一个obj文件,而多个obj文件就可以连接生成lib文件。就像上一篇文章讲的那样,如果你工程里只有一个lib.h和lib.cpp,那么编译后产生的lib文件实际上就是lib.obj文件的一个集合,但是如果你工程里还有其他的很多个cpp文件,那么就会在编译之后生成许多obj文件,然后最终只链接生成一个lib文件。

        所以,静态lib文件实际上是包含了所有的导出声明和实现。你如果把这个lib文件链接到自己的程序之后,这个lib文件中的所有代码都会嵌入进来,哪怕你只用到了其中一部分,剩下没用到的也进了你的代码这就不难想象会造成的后果了,虽然方便,但是如果大部分你都用不到,自然会导致你的库体积没有意义地变大,失去了使用动态库的灵活性,而且发布新的版本时必须要发布新的应用程序才行,而不是简单打个补丁就好。就是因为这种缺点,才会出现动态dll调用这种方式。

      这世上所有事情的出现都是有理由的,如果静态lib能完成我们想要的功能,而没有缺点的话,就不会有第二种替代方案dll的出现!

举例

用OpenCV的开源库来举个例子看一下就知道了:

  • bin文件夹里面放的都是dll文件;
  • lib文件夹里面放的都是伴随dll文件的动态lib文件;
  • staticlib文件夹里面放的才是真正的静态lib文件,和dll文件是独立的;

参考文献

https://baike.baidu.com/item/lib/2395664

https://blog.csdn.net/m0_37876745/article/details/78323848

这篇关于什么是Lib的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148011

相关文章

PHP7扩展开发之函数方式使用lib库

前言 首先说下什么是lib库。lib库就是一个提供特定功能的一个文件。可以把它看成是PHP的一个文件,这个文件提供一些函数方法。只是这个lib库是用c或者c++写的。 使用lib库的场景。一些软件已经提供了lib库,我们就没必要再重复实现一次。如,原先的mysql扩展,就是使用mysql官方的lib库进行的封装。 在本文,我们将建立一个简单的lib库,并在扩展中进行封装调用。 代码 基础

PHP7扩展开发之对象方式使用lib库

前言 上一篇文章,我们使用的是函数方式调用lib库。这篇文章我们将使用对象的方式调用lib库。调用代码如下: <?php $hello = new hello(); $result = $hello->get(); var_dump($result); ?> 我们将在扩展中实现hello类。hello类中将依赖lib库。 代码 基础代码 这个扩展,我们将在say扩展上增加相关代码。sa

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

Eclipse发布Maven项目到tomcat,无法加载到lib文件夹下的jar包

BMS 解决方法: 当我们发布web项目到tomcat时,访问地址时会报一个classnotfound的错误,但是eclipse中的项目中都已经添加了相应的类,有一种比较容易犯的错误是,你没有把额外所需的jar包加到tomcat中的lib文件夹中,在这里介绍一种在项目中直接添加jar包到lib目录下:  右键已创建的web项目——properties属性——点击Deployment Assem

尝试制作和使用lib与dll

前言 关于lib和dll这两种库的概念,网上已有很多讨论可以参阅。这篇博客主要记录我动手尝试用VS来制作lib和dll并随后使用的过程。 参考: lib和dll的区别与使用 - LuckyAnnika - 博客园 C++编写一个简单的DLL - _No.47 - 博客园 dumpbin工具 在开始之前,需要介绍一下VS提供的dumpbin工具,这个工具可以获取一些lib与dll中的信息。 它

C语言通过MFC访问FTP,头文件个,宏和lib问题处理

1、预处理器定义 _LIB _CRT_SECURE_NO_WARNINGS _AFXDLL WIN32_LEAN_AND_MEAN

VS2013 中生成lib和dll库文件

①新建项目-->win32-->win32项目-->输入项目名为DllTest-->选择Dll-->选择空项目-->完成 ②添加头文件和源文件并命名为DllTest.h和DllTest.cpp(方法:分别在头文件和源文件  :右键---添加---新建项) ③头文件和源文件的定义(这里我们只实现加法运算) // DllTest.h #ifdef DLL_API#else#

SpringBoot打包无法打入Lib文件夹下自己添加(不在Maven仓库)中的JAR包。无法将JSP界面打入JAR包。因为找不到启动类导致系统无法访问的问题

今天在SpringBoot打JAR包部署的时候,出现以下问题,记录整理如下: 问题一:SpringBoot打包无法打入Lib文件夹下自己添加(不在Maven仓库)中的JAR包。 在SpringBoot工程开发中,需要引入其他jar包,由于没有通过在POM.XML文件中,通过Maven仓库增加,而是在WEB-INF下新增lib文件,将需要的jar包放入改文件夹下,然后通过build将jar包引入

More than one file was found with OS independent path ‘lib/arm64-v8a/libopencv_java4.so‘

解决方案: 在app下的build.gradle中加入以下代码: packagingOptions {pickFirst 'lib/arm64-v8a/libopencv_java4.so'}

/var/lib/docker/overlay2占用空间越来越大

如果你发现 /var/lib/docker/overlay2 目录占用了越来越大的空间,这通常意味着 Docker 容器和镜像占用了相当多的磁盘空间。Docker 使用 overlay2 存储驱动来管理容器层和镜像层,这些层都存储在 overlay2 目录下。 以下是一些建议的步骤来清理 Docker 并释放空间: 删除未使用的镜像: 使用 docker images 命令列出所有镜像,并识