.a和.so库文件是什么?

news2024/11/28 20:48:16

我们在编译开源代码后,通常会生成.a和.so这两个库文件,这两个文件有什么区别?又如何使用?

在 Linux 中,.a.so 文件都是库文件,但它们有一些区别:

静态库文件(.a)

  • 静态库文件是编译后的目标文件的归档文件,其中包含了多个目标文件(通常是 .o 文件)的集合。这些目标文件被打包成一个单独的文件,以便在链接时使用。
  • 静态库文件中的代码会被完整地复制到最终的可执行文件中,因此最终的可执行文件会变得较大。
  • 静态库文件在链接时,链接器会将其中的目标文件整体复制到可执行文件中,因此可执行文件独立于库文件。这意味着在运行时,不需要库文件存在。

共享库文件(.so)

  • 共享库文件是编译后的目标文件的动态链接库文件,其中包含了可重用的函数和数据的集合。这些函数和数据在程序运行时会被动态加载到内存中。
  • 共享库文件中的代码不会被复制到最终的可执行文件中,而是在程序运行时由操作系统动态加载。
  • 共享库文件在链接时,链接器只会记录库文件的信息,而不会将库文件中的代码复制到可执行文件中。因此,可执行文件依赖于库文件,需要在运行时确保库文件存在。

1、使用方法

1.1、静态库文件的使用

在编译时,通过 -l 选项指定要链接的静态库文件,例如 -lmylib 表示链接 libmylib.a 静态库文件。

静态库文件通常在编译时直接链接到可执行文件中,因此不需要在运行时担心库文件的位置。

1.2、共享库文件的使用

在编译时,通过 -l 选项指定要链接的共享库文件,例如 -lmylib 表示链接 libmylib.so 共享库文件。

在运行时,程序需要知道共享库文件的位置。可以通过以下几种方式之一实现:

  • 将共享库文件放置在默认的库搜索路径中,例如 /usr/lib/usr/local/lib 等。
  • 将共享库文件所在目录添加到 LD_LIBRARY_PATH 环境变量中,例如 export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH
  • 在程序中使用 ldconfigLD_PRELOAD 等机制来指定共享库文件的位置。

2、区别

主要区别在于静态库文件的代码在编译时被复制到可执行文件中,而共享库文件的代码在运行时由操作系统动态加载。这导致了静态库文件的可执行文件会更大,而共享库文件的可执行文件则会更小。

静态库文件使得可执行文件与库文件完全独立,但也导致了可执行文件的体积较大。而共享库文件可以被多个程序共享,因此节省了磁盘空间,并且使得系统中的程序能够共享相同的库,但会增加对库文件位置的依赖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离

文章目录 1)数字三角形1:顺推2:逆推 2)最长上升子序列1:线性DP做法2:二分优化 3)最长公共子序列4)最长公共子串5)字符串编辑距离 1)数字三角形 1&#xff1a…

LabVIEW闭环步进电机运动系统设计及精度分析

LabVIEW闭环步进电机运动系统设计及精度分析 在自动化设备不断发展的当代,闭环步进电机以其高精度和可靠性成为了自动化设备的重要组成部分。以LabVIEW软件为核心,结合运动控制卡及驱动器模块,设计并实现了一个闭环步进电机的多轴运动控制系…

内核驱动更新

1.声明我们是开源的 .c 文件末尾加上 2.在Kconfig里面修改设备,bool(双态)-----》tristate(三态) 3.进入menuconfig修改为M 4.编译内核 make modules 也许你会看到一个 .ko 文件 5.复制到根目录文件下 在板子…

XAI有什么用?探索LLM时代利用可解释性的10种策略

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 你是否也好奇,在大模型时代,可解释性人工智能技术(XAI&am…

SAP ABAP 连接外部数据库

前言 SAP 连接外部数据库有多种方法,这里我们介绍DBCO 连接 DBCO 代码 DATA: OREF TYPE REF TO CX_ROOT,TXT TYPE STRING,M_WERKS TYPE WERKS_D,STRCDATE TYPE C LENGTH 10. DATA:BEGIN OF T_ITEM OCCURS 0, CDATE TYPE C LENGTH 10, END OF T_ITEM. M…

八款禁用U盘的软件

八款禁用U盘的软件禁用U盘的软件通常用于企业或组织环境中,以防止未经授权的USB设备接入计算机,从而保护数据安全、防止病毒传播或限制员工使用U盘。以下是一些可以禁用U盘的软件推荐。 1、安企神软件 权限设置:为终端电脑设置使用权限&…

Terraform 语法配置

配置语法 Terraform 的配置文件都是以 .tf 为后缀Terraform 支持两种模式 HCL、JSON Provider 插件 providers 地址:Terraform Registry Terraform 通过 provider 管理基础设施,使用 provider 与云供应商 API 进行交互,每个 Provider 都包含…

OSCP靶场-- Sybaris

OSCP靶场–Sybaris 考点(redis MODULE LOAD命令执行) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.93 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-11 04:24 EDT Nmap scan report for 192.168.158.93…

差分数组加前缀和

暴力 #include <bits/stdc.h> using namespace std; char arr[(int)1e5*25]; //要强制转换为int int main() {//cout << (char)(a7);long long len0,op0;cin >> len >> op;cin >> arr; //cout << op;//cout << arr;int inx[(int)…

6.12物联网RK3399项目开发实录-驱动开发之UART 串口的使用(wulianjishu666)

嵌入式实战开发例程【珍贵收藏&#xff0c;开发必备】&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tkDBNH9R3iAaHOG1Zj9q1Q?pwdt41u UART 使用 简介 AIO-3399J 支持 SPI 桥接/扩展 4 个增强功能串口&#xff08;UART&#xff09;的功能&#xff0c;分别为 UA…

【UE Niagara】光束发射模块学习

效果 步骤 1. 新建一个Niagara发射器&#xff0c;使用Empty模板&#xff0c;这里命名为“NE_Beam” 打开“NE_Beam”&#xff0c;添加条带渲染器 添加“Spawn Burst Instantaneous”模块&#xff0c;设置生成数量为100 添加一个“Beam Emitter Setup”模块 再添加一个“Spawn …

基于STM32G030F6部分芯片烧录程序后无法识别也不运行之救砖笔记

基于STM32G030F6部分芯片烧录程序后无法识别也不运行之救砖笔记 目录 问题背景思路总结 问题背景 使用STM32G030F6这颗ic作设计&#xff0c;程序中有设置L1级读保护。首次烧写全部显示成功&#xff0c;打算再次烧录时有极个别已经找不到芯片&#xff0c;其中不能再次烧入的板子…

什么是 DNS 记录?

DNS记录是存储在DNS服务器上的文本指令。它们表明与一个域名相关的IP地址&#xff0c;也可以提供其他信息。DNS记录是计算机用语&#xff0c;指域名系统&#xff08;Domain Name System&#xff0c;简称DNS&#xff09;中的一条记录&#xff0c;这条记录存储于DNS服务器中。每一…

数通学员分享丨在誉天学习数通课程怎么样

哈喽大家好&#xff0c;我是来自誉天的田同学&#xff0c;我与誉天的故事是2022年8月开始的。 2022年六月毕业之后&#xff0c;由于对自身专业的不喜欢&#xff08;学的工程&#xff09;&#xff0c;我对未来非常的迷茫&#xff0c;这个时候我接触到了誉天&#xff0c;开启了我…

稀碎从零算法笔记Day40-LeetCode:加油站

题型&#xff1a;贪心、模拟、数组 链接&#xff1a;134. 加油站 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第…

Harmony鸿蒙南向驱动开发-PIN接口使用

功能简介 PIN即管脚控制器&#xff0c;用于统一管理各SoC的管脚资源&#xff0c;对外提供管脚复用功能&#xff1a;包括管脚推拉方式、管脚推拉强度以及管脚功能。 PIN接口定义了操作PIN管脚的通用方法集合&#xff0c;包括&#xff1a; 获取/释放管脚描述句柄&#xff1a;传…

【C++第三阶段】stackqueue容器

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 stack容器queue容器 stack容器 是什么&#xff1f;功能是什么&#xff1f;常用接口是什么&#xff1f;局限性有哪些&#xff1f;优势又有哪些&#xff1f; 栈容器&#xff0c;先进…

@Transactional失效的10种场景

Transactional失效的场景都有哪些呢&#xff1f;本章节针对Transactional的问题&#xff0c;做以下总结整理。 1、同一个类中&#xff0c;方法内部调用事务失效 2、事务方法被final、static修饰 3、当前类没有被Spring管理 4、非public修饰的方法&#xff08;存在版本差异&a…

Spring5深入浅出篇:bean的生命周期

Spring5深入浅出篇:bean的生命周期 什么是对象的⽣命周期 指的是⼀个对象创建、存活、消亡的⼀个完整过程 为什么要学习对象的⽣命周期 由Spring负责对象的创建、存活、销毁&#xff0c;了解⽣命周期&#xff0c;有利于我们使⽤好Spring为我们创建的对象 ⽣命周期的3个阶段…

知识图谱的演进与基于 OpenSPG+TuGraph 的推理实践

本文为蚂蚁集团开发工程师王少飞在TuGraph Meetup北京站的演讲&#xff0c;主要介绍了蚂蚁知识图谱平台经过多年金融领域业务沉淀的知识语义增强可编程框架SPG&#xff0c;及TuGraph作为执行引擎在图谱推理过程的作用。 作者介绍&#xff1a; 王少飞&#xff0c;蚂蚁知识图谱推…