【Linux】静态库和共享库

news2024/12/23 17:38:58

目录

库是什么

静态库和共享库

库的链接

优缺点

查看使用的库

制作库

制作静态库

静态库的使用

制作共享库

共享库的使用

静态库和共享库的区别


库是什么

库就是预先编译好的方法的集合

.h中是库函数的声明,库函数的实现在库中,如:printf库函数的实现在libc.so(c动态库)中

因为库函数不用修改,只用链接就可以,减少编译消耗时间,所以库中的文件都是.o文件

静态库和共享库

库分为静态库和共享库。静态库为libxx.a,共享库为libxx.so,  xx是库的名字,现在基本上都使用共享库

Windows上静态库为.lib,动态链接库为.dll

库的链接

        静态库将库中的那些方法包含在可执行程序中

        共享库标记程序中用到共享库的方法,运行程序时动态链接,即运行程序时寻找库。

优缺点

静态库的

优点:如果计算机上没有这个静态库,程序依旧可以运行,因为程序已经包含了这个库;

缺点:程序体积较大,磁盘到内存空间都被占了。

共享库的

优点:程序体积较小,一份库放在内存中大家都可以共享使用;

缺点:1.计算机上要有使用了的所有动态库,如果运行程序时找不到这个库,则运行错误。2.运行程序时装载库,程序可能变慢。

查看使用的库

静态库成为程序的一部分了,所以无法查看

共享库:ldd 程序名

可以看到链接了三个库,两个是linux默认的,还有一个c库(用到了printf)

制作库

一些文件的位置:

头文件  /usr/include

库文件  /usr/lib,/lib

可执行程序  /usr/bin,/bin  (sbin是管理员用的命令,bin都可以使用)

例如pwd,在bin中可以直接使用,而不用把它的绝对路径输出出来

制作静态库

1.将所有.c编译成.o

2.使用ar命令将所有.o程序打包到一个库中

c创建库,r将方法添加到库中,v显示过程(可有可无)

静态库的使用

使用时,只用传头文件.h,编译链接使用-L、-l告诉main程序用哪个库

-L指定库的位置,-l指定库的名称(不加前缀lib和扩展名.a)中间没有空

如果不用-L-l,编译会报错:找不到这个方法

但是如果库和头文件在标准目录下/usr/lib和/usr/include,可以省略-L

编译后删掉库依旧可以再次执行

制作共享库

第一步与静态库一样

第二步使用gcc命令将第一步编译的所有.o文件生成共享库

共享库的使用

编译跟静态库是一样的

编译完不能直接运行(./main),因为他找不到动态库,运行时找库只在标准位置(/lib或/usr/lib等)中寻找,编译时是把路径告诉给gcc链接的位置,运行时不在那个位置找

两个方法解决此问题:

  1. 用环境变量告诉main在某个位置装载库(多用于测试)

echo $LD_LIBRARY_PATH

LD_LIBRARY_PATH = 库的位置  //位置赋值

export LD_LIBRARY_PATH  //做成环境变量  

这样把库的位置放到PATH中

  1. 把库挪到标准目录下(优)

在Ubuntu中/usr/lib跟/lib是一个位置

静态库和共享库的区别

静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做
标记,在运行程序时,才动态加载。

就算删除了静态库,程序也可以执行

更新库时静态库必须重新编译,而共享库新库可以直接覆盖旧库

理论上共享库比静态库小

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

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

相关文章

ChatGPT上线了!我在2023年1月2日这一天用上了它!百问百答!我只能说(真NB)算法工程师可以不用百度/Google了!

目录:问答结果1、你有什么nlp算法?2、平台终端3、如何训练深度学习模型?4、如何压缩nlp模型?5、bert模型有哪些用途?6、你知道汽车座舱吗?7、知识图谱有什么用途?8、能给一个构建知识图谱的案例吗&#xff…

S32K144—基于MBD的BLDC六步换相算法

可以简单分为六个功能区域: 1、全局变量 全局变量的定义是建模过程中遇到的第一个难点,因为它涉及到我们软件开发中最基础的东西——数据类型定义(Data Types Definition)。 在 Simulink 中可以通过 Bus Editor 构建自定义数据类…

【 shell 编程 】第5篇 文本编辑三剑客

文本编辑三剑客 文章目录文本编辑三剑客一、正则表达式1.基本正则表达式元字符2.拓展正则表达式元字符二、grep1.grep2.egrep3.fgrep三、sed四、awk一、正则表达式 1、简介:正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的…

点云算法-提取kitti路面点云

目录 一、ransac原理 二、ransac 地面分割原理 三、ransac常见应用 四、代码 五、截图 六、总结 一、ransac原理 RANSAC是“random sample consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估…

【408篇】C语言笔记-第二十一章(汇编语言)

文章目录第一节:汇编指令格式讲解1. 汇编指令格式2. 生成汇编方法第二节:汇编常用指令讲解1. 相关寄存器2. 常用指令3. 条件码第三节:各种变量赋值汇编实战1. 各种变量赋值汇编实战解析第四节:选择循环汇编实战1. 选择循环汇编实战…

基于ssm+mysql+jsp实现歇后语管理系统

基于ssmmysqljsp实现歇后语管理系统一、系统介绍二、系统展示1.歇后语大全2.歇后语排行榜3.歇后语管理4.用户管理三、其它系统四、获取源码一、系统介绍 本系统实现了 普通用户:歇后语大全、歇后语排行榜、歇后语管理 管理员用户:歇后语大全、歇后语排行…

一键替换Markdown文件的字体样式

功能说明 一键替换MD文件的字体样式:加粗字体—>橙色不加粗 也可以针对其它样式做切换,源码就一个demo类,修改正则匹配相关变量即可; 环境要求: windows jdk1.8 工具下载 百度网盘:提取码: ae16 …

week9

T1【深基18.例3】查找文献 题目描述 小K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章。小K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献&#xff0…

7.1 定义抽象数据类型

文章目录定义改进的Sales_data 类定义成员函数引入this指针引入const成员函数类作用域和成员函数在类的外部定义成员函数定义返回this的函数类的静态成员定义类相关的非成员函数构造函数合成的默认构造函数某些类不能依赖合成的默认构造函数定义构造函数拷贝 赋值和析构某些类不…

11.2、基于Django4的可重用、用户注册和登录系统搭建(优化)

文章目录前端界面设计与优化完善登录界面的视图函数session会话和登出的视图函数将当前代码推送至Gitee添加图片验证码前端界面设计与优化 使用CSS框架 Bootstrap4,Bootstrap将CSS样式和JS都封装好了,可以直接使用。 下面使用的Bootstrap模板来自官方文…

AHB协议(1/2)

AHB协议(1/2) 以下内容为AMBA5 AHB Protocol Specification协议内容 Charpter 1 Introduction 1.1 关于AHB协议 AMBA AHB是一个支持高性能设计的总线接口。他在组件间,如主端(Master),互联结构&#xf…

云原生之使用Docker部署Dailynotes个人笔记管理工具

云原生之使用Docker部署Dailynotes个人笔记管理工具一、Dailynotes介绍二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载Dailynotes镜像四、创建Dailynotes容器1.创建数据目录2.创建Dailynotes容器3.查看Dailynotes容器状态五、访问Dailynotes1.进入Dailynotes…

uniCloud云开发----5、uni-id-pages的使用

uni-id-pages的使用前言1、下载uni-id-pages插件2、查看登录页面3、配置项云端配置config.json前言 在开发过程中,会发现微信小程序的登录方式不断地更新和变化,这样导致我们在开发过程中非常的困难,uni-id-pages直接集成的页面和数据库来实…

67、【链表】leetcode——242. 有效的字母异位词(C++版本)

题目描述 原题链接:242. 有效的字母异位词 一、ASCII码作为Key 因s和t都为小写字母,因此可将s和t中字母用ASCII码数字表示,减去a,映射到0-25当中,作为Hash表映射结构。 首先,查看s和t的长度是否相同&…

09线性相关、基、维数

线性相关、基、维数 知识概要 ​ 从线性相关或线性无关的特征入手,介绍空间的的几个重要概念:基、维数 线性无关与线性相关 (1)背景知识: 谈论的概念都是基于向量组的,而不是基于矩阵。线 性无关,线性相关是向量组内的关系,基也是一个向量组,不要与矩阵概念混淆。 首先…

华为云工程师HCIA——服务器技术基础

服务器的定义 服务器是计算机的一种。他比普通计算机运行熟读更快、负载更高而且价格更高。 服务器是为用户提供服务的计算机,通常分为文件服务器、数据库服务器和应用程序服务器。 服务器特点 可用性可扩展性可管理性易用性可靠性 服务器硬件结构 Huawei2280…

01 大数据概述

01 大数据概述1、大数据: 主要用来解决海量数据的存储和海量数据的分析计算问题。 2、大数据的特点: 大量(Volume):一些大企业的数据量已经接近EB量级。高速(Velocity): 随着数据量的增大&…

B树的原理及代码实现、B+树和B*树介绍及应用

目录 一.B树介绍 (一).B树存在意义 (二).B树的规则 二.B树实现原理及代码 (一).实现原理 (二).代码 三.B树 (一).概念 (二).应…

Python批量采集某网站高清壁纸,这下不用担心没壁纸换了

前言 咳咳,担心壁纸不够用?想要一天换一张?ok ,今天就来搞搞壁纸网站 之前老有很多高质量的网站都不见了,趁着这个还在,赶紧多保存点 话不多说 马上开始 我的表演 代码 导入模块 所有 源码 点击 此处 领…

矩阵快速幂(新手做法)

1.通过一个代码来了解矩阵乘法2.基本快速幂3.那么最后就是矩阵快速幂了4.练习模板:5.进阶运用,蓝桥杯15届省赛c语言组第9题矩阵快速幂的学习流程: 矩阵乘法运算规则(线性代数基础)快速幂的模板 1.通过一个代码来了解矩…