六、库文件

article/2025/8/18 13:33:02

今天我们来了解一下库文件,主要有以下几个内容:

文章目录

    • 一、库文件概念
    • 二、静态库
      • (一)生成&&使用
      • (二) 示例
      • (三) 特点
    • 三、动态库
      • (一)生成&&使用
      • (二) 示例
      • (三) 特点
    • 四、区别

一、库文件概念

  1. 概念 通俗来讲就是将用户写好的程序打包成一个整体,当其他模块或用户使用时,只需要有这个库文件就可以了,不需要源代码文件。也可以理解为一组预先编译好的方法的集合。
  2. 存储位置:
  • Linux系统存储库的位置一般在/lib或/usr/lib,在64位的系统上有些库也有可能被存储在/usr/lib64下。所以运行程序没有手动指定位置时,会在这几个默认的位置去找。
  • 库的头文件一般在/usr/include下或其子目录。这也是为啥我们好多头文件是# include<xxxx.h>的原因。
  1. 库的分类:我们一般以扩展名进行区分
系统静态库动态库
windows.lib.dll
Linux.a.so
  1. 特点: 函数方法声明在.h头文件中,函数实现在库中,库无法查看,因为不是源代码,而是经过经过编译链接后的一个文件。所以其他人无法看到我们的源代码,但可以通过.h文件调函数接口。
  2. 常用的库:C库:libc.so;C++库:libstdc++.so

二、静态库

首先我们学习静态库是如何生成和使用的。

(一)生成&&使用

1. 生成:两步

(1)利用gcc将所有源代码(.c)编译成中间文件(.o)

gcc -c *.c

注意此时的源代码不包含main.c,因为你要被他人使用,不能占用函数入口。

(2)使用命令生成库:

ar crv libxxxx.a 所有的中间文件

c是创建库,r是将方法添加到库,v是显示过程,xxxx代表库的名字。

两步之后就会生成xxxx的静态库。

2. 使用:

在编译时需要连接库地址和库名称:

gcc -o main main.c -L库路径 -l库名称

注意库地址是静态库在哪里存储的路径,如果没给就在默认的/lib和/usr/lib下找;库名称是xxxx,不包括lib。

(二) 示例

我们来举个例子吧,用加减乘除四个函数的.c文件生成myMath.a静态库。

  1. 生成
    (1)把四个.c文件都变为.o文件:
    在这里插入图片描述
    (2)生成静态库myMath.a
    在这里插入图片描述
  2. 使用
    然后开始使用:
    在这里插入图片描述

(三) 特点

程序链接过程中,会从库中得到所需库的代码,复制到生成的可执行文件中,因此,静态库是在程序的链接阶段被复制到程序当中,和程序执行过程没有关系。

三、动态库

动态库我们有时也称为共享库,我们可以通过命令:

ldd main

查看main函数使用了哪写共享库。

(一)生成&&使用

  1. 生成

它的生成只有一步,借助gcc即可完成,所以也有人说它是一个不可单独执行的可执行文件,因为没有main,所以不可单独执行。生成命令:

gcc -shared -fPIC -o libxxxx.so 所有代码的源文件

源文件自然也不包含main.c。

  1. 使用:

和静态库的使用指令一样:

gcc -o main main.c -L库路径 -l库名称

但是运行会报错.

原因: 首先我们要明确它的生成没有问题,在运行时出错了,这和它的机制有关系,它不像静态库把代码直接复制过去,它只是在main函数中做了个标记,在运行时,系统根据这个标记找到库函数,进行运行。那么我们就可以看到我们的错误就是:只给mian函数指明了动态库的位置,但没给系统指出动态库的位置,系统在默认下找不到,自然就出错了,故总结共享库在程序运行时,由操作系统单独加载执行,不是和主函数一起的,所以在使用时也要告诉操作系统动态库的位置。那我们现在给系统指明路径如果多个共享库地址,用”;"分开,有两种办法:
(1)把动态库放到默认的两个路径/lib或/usr/lib下。通过指令mv即可实现。
(2)通过给环境变量LD_LIBRARY_PATH赋值(当前路径)给系统指明,但要注意,这个变量仅仅对当前终端有效,若想要永久修改,需要以管理员身份在家目录的.basgrc中添加这个变量并赋值。路径不包含中文。
添加环境变量:

export LD_LIBRARY_PATH=动态库绝对路径

查看变量值:

echo $LD_LIBRARY_PATH

(二) 示例

  1. 生成:
    在这里插入图片描述

  2. 使用:

先删除上一个静态库生成的main,再进行使用:
在这里插入图片描述

我们可以看到在编译链接时没问题,运行时出错了,这时我们两种办法,在这我使用第二种添加环境变量:先pwd看一下动态路径在哪里,然后添加即可,我采用临时的环境变量:

在这里插入图片描述

(三) 特点

动态库在编译连接时只是在main函数中做个标记,告诉它地址,在运行时才会顺着地址找过来动态加载,所以在main运行时动态库必须存在,否则出错。

四、区别

那么我们来总结以下这两个库的区别:

  1. 静态库在链接时将用到的方法包含到最终生成的可执行文件中,而共享库不包含,只做标记,在运行时,才动态加载。
  2. 动态库占用空间小,有共享的特点。假如静态库10个人用,那么10个人每个人一份,就有10份;而动态库每个做个标记,运行时动态加载即可,始终一份。
  3. 动态库适用于更新操作。如果库功能修改更新,那么静态库需要重新链接才可以使用;动态库就不用,因为它只是给了标记,在运行时动态加载,肯定是最新的库。
  4. 动态库这么好,那么在静态库动态库名称一样时优先使用动态库。

加油哦!💪。


http://chatgpt.dhexx.cn/article/2UOoehVJ.shtml

相关文章

库文件

目录 库文件 静态库 动态库&#xff08;共享库&#xff09; 静态库和共享库的区别 库文件 库文件是预先编译好的方法的集合。 比如&#xff1a;我们提前写好一些数据公式的实现&#xff0c;将其打包成库文件&#xff0c;以后使用只需要库文件就可以&#xff0c;而不需要重…

EDID 修改

EDID 128字节(不包括扩展)&#xff0c;如果手动修改的话比较麻烦(最后一个字节校验和必须自己计算–128字节和为0)&#xff0c;借助第三方工具比较好。 比如&#xff1a; SoftMCCS Phoenix EDID Designer EDIDManager EDIDViewer等。 如果只要修改制造商代号&#xff0c;…

EDID参数介绍

1、显示器的第24个字节是设置显示器的电源管理标准的。 各个位的作用如下&#xff0c;注意到标号为1的位是关于主画面。 3、Gamma源于CRT的响应曲线&#xff0c;即反映显像管的图像亮度与输入电子枪的信号电压的非线性关系的一个参数。对于CRT显示器而言&#xff0c;显像管电子…

EDID文件格式转换工具介绍

EDID文件格式转换工具介绍 1 EDID文件 简单来说&#xff0c;EDID文件主要内容就是128个字节数据&#xff08;V1.3版本&#xff09;或是256个字节数据&#xff08;V1.4版本&#xff09;。   但是不同的EDID的编辑工具支持的文件格式又不同&#xff0c;例如Phoenix EDID Desig…

EDID含义浅析

SoftMCCSEDID 开头&#xff08;HEADER&#xff09; 开头八个字节为EDID的开始标志&#xff0c;简称头&#xff0c;固定为&#xff1a;制造商和产品ID 这十个字节表示产品&#xff08;MONITOR&#xff09;ID和制造商信息。详细如下&#xff1a;EDID版…

display:dp:edid/e-edid/displayid

名词 EDID Extended Display Identification Data (Legacy VESA structure, superseded by the DisplayID structure).E-EDID Enhanced Extended Display Identification Data (Legacy VESA structure, superseded by the DisplayID structure).DisplayID Displa…

如何获取显示器的EDID信息

来源:http://wenku.baidu.com/view/8f82728471fe910ef12df8f4.html Q1: 为什么要写这篇文章&#xff1f; A1&#xff1a;在最近的工作中遇到了不少问题&#xff0c;其中很多都是和EDID相关的。可以说&#xff0c;作为一家以“显示”为生的企业&#xff0c;我们时时刻刻在与EDID…

HDMI之EDID使用说明

Q1: 为什么要写这篇文章&#xff1f; A1&#xff1a;在最近的工作中遇到了不少问题&#xff0c;其中很多都是和EDID相关的。可以说&#xff0c;作为一家以“显示”为生的企业&#xff0c;我们时时刻刻在与EDID打交道。EDID这东西很简单&#xff0c;但是如果不了解其基本原理和…

EDID基础

EDID EDID&#xff1a;Extended Display Identification Data (拓展显示标识数据)EDID是由VESA创造出来的&#xff0c;用于使显示器支持即插即用。 一般EDID存在于显示器的PROM或EEPROM内&#xff0c;一般如要读取EDID都是通过DDC EDID的作用主要是为了能让PC或其他的图像输…

EDID 解读

现在的显示设备比如显示器&#xff0c;电视等都HDMI接口&#xff0c;那通常每个HDMI接口都保留有一份EDID数据&#xff0c;这个数据可以存在程序里面由系统启动过程中来初始化&#xff0c;更常见的做法是每个HDMI口会有一个EEPROM来保存这份数据&#xff0c;这个EEPROM也只是有…

HDMI设计2----EDID and E-EDID

1,EDID是什么&#xff1f;有什么用&#xff1f; 图1 应用场景 如图1所示的应用场景&#xff0c;PC将视频信号发送 到我们的设备上&#xff0c;经过一系列的传输和切换&#xff0c;设备将视频信号发送到显示器或者投影机上&#xff0c;也就是说&#xff0c;我们的设备位于PC和显…

EDID 解析

1、显示器的第24个字节是设置显示器的电源管理标准的。 各个位的作用如下&#xff0c;注意到标号为1的位是关于主画面。 3、Gamma源于CRT的响应曲线&#xff0c;即反映显像管的图像亮度与输入电子枪的信号电压的非线性关系的一个参数。对于CRT显示器而言&#xff0c;显像管电子…

EDID标准简介

小伙伴们在设计显示接口的时候&#xff0c;常常会遇到显示器支持格式的问题&#xff0c;这里呢就简要的介绍下格式握手的重要协议EDID。 EDID&#xff08;ExtendedDisplay Indentification Data Standard&#xff09;就是显示器通过DDC&#xff08;Display DataChannel&#xf…

HDMI协议介绍(六)--EDID

目录 什么是EDID EDID结构 1)Header Information 头信息(厂商信息、EDID 版本等) (2)Basic Display Parameters and Features 基本显示参数(数字/模拟接口、屏幕尺寸、格式支持等) (3)色度信息 (4)Established Timings(VESA 定义的电脑使用 Timings) (5)Standard Timing…

EDID编辑器介绍

目录 1 EDID介绍2 DDC通道3 EDID编辑工具3.1 Phoenix EDID Designer3.2 Deltacast E-EDID Editor 4 EDID烧录工具 1 EDID介绍 EDID, Extended display identification data&#xff0c;中文名称扩展显示器识别数据&#xff0c;是VESA在制定DDC(Display Data Channel)显示器数据…

什么是EDID,EDID能做什么,EDID基本介绍

Q1: 为什么要写这篇文章&#xff1f; A1&#xff1a;在最近的工作中遇到了不少问题&#xff0c;其中很多都是和EDID相关的。可以说&#xff0c;作为一家以“显示”为生的企业&#xff0c;我们时时刻刻在与EDID打交道。EDID这东西很简单&#xff0c;但是如果不了解其基本原理和概…

EDID使用说明

来源:http://wenku.baidu.com/view/8f82728471fe910ef12df8f4.html Q1: 为什么要写这篇文章&#xff1f; A1&#xff1a;在最近的工作中遇到了不少问题&#xff0c;其中很多都是和EDID相关的。可以说&#xff0c;作为一家以“显示”为生的企业&#xff0c;我们时时刻刻在与EDID…

EDID解析

1 Instruction EDID: Extended Display Identification Data&#xff08;扩展显示标识数据&#xff09;是一种VESA &#xff08;Video Electronics Standards Association&#xff09;标准数据格式&#xff0c;其中包含有关显示器及其性能的参数&#xff0c;包括供应商信息、最…

EDID 详解

1 Instruction EDID: Extended Display Identification Data&#xff08;扩展显示标识数据&#xff09;是一种VESA &#xff08;Video Electronics Standards Association&#xff09;标准数据格式&#xff0c;其中包含有关显示器及其性能的参数&#xff0c;包括供应商信息、最…

EDID介绍

1.EDID是什么&#xff1f; EDID&#xff08;Extend Display Identification Data&#xff09;扩展显示器识别数据&#xff0c;是VESA在制定DDC&#xff08;Display Data Channel&#xff09;显示器数据通道通信协议时&#xff0c;制定的有关显示器识别数据的标准。其中包含有关…