Linux中的库

什么是库?

库是一组预先编译好的方法/函数的集合,其他程序想要使用源文件中的函数时,只需在编译可执行程序时,链接上该源文件生成的库文件即可。

库分为两类:静态库和动态库

  • 在Linux系统中,以.a为后缀的是静态库,以.so结尾的是动态库。
  • 在Windows系统中,以.lib为后缀的是静态库,以.dll结尾的是动态库。

那么这两种库有什么区别呢?
1. 静态库: 在使用g++编译程序时,会根据库和我们写的源文件,最终生成一个可执行程序。 静态库也放入可执行程序中,每个可执行程序单独拥有一个静态库。体积较大,但执行效率较高。

2. 动态库: 在使用g++编译程序时,会根据库中相关函数的索引表和我们写的源文件,最终生成一个可执行程序。每个可执行程序中只拥有相关函数的索引表,当程序执行到对应函数时,会根据索引表,动态寻找该函数的位置,然后调用。体积较小,但执行效率较低。 由于多个程序共享同一个动态库,因此动态库也叫共享库。

库的制作与使用

静态库

  1. 编译生成静态库
g++ -c ***.cpp -o ***.o # 只编译,不链接生成二进制文件
ar -crs lib***.a ***.o # 编译生成静态库

# 如果有多个.o文件共同编译生成静态库,则将所有.o文件都写在后面
ar -crs lib***.a ***.o xxx.o ...

指令解释:

  • ar:用于生成静态库的指令
  • ar -c:用于创建静态库
  • ar -r:将文件插入或者替换静态库中同名文件
  • ar -s:重置静态库索引
  1. 使用静态库
g++ main.cpp -L 库的路径 -l库名 -I 头文件的路径 # 库名的前面需要加上l字母
# 如果库所在的路径和头文件所在的路径为当前路径,则可以使用 “.” 来简化书写
g++ main.cpp -L . -l库名 -I . 路径

动态库

  1. 编译生成动态库
g++ -fPIC -c ***.cpp -o ***.o # 编译生成二进制文件
g++ -shared ***.o -o lib***.so # 依赖于二进制文件生成一个动态库

# 上面两个指令可以合成一条指令
g++ -fPIC -shared ***.cpp -o lib***.so
  1. 使用动态库(和使用静态库命令相同)
g++ main.cpp -L 库的路径 -l库名 -I 头文件的路径 # 库名的前面需要加上l字母
# 如果库所在的路径和头文件所在的路径为当前路径,则可以使用 “.” 来简化书写
g++ main.cpp -L . -l库名 -I . 路径

如果使用上述命令后生成了可执行程序,但是使用动态库时却报错了:
在这里插入图片描述
可以尝试以下解决方案:

  1. 更改路径的宏
export LD_LIBRARY_PATH=库的路径
  1. 将自己的动态库放到系统的库函数目录中(/lib64或/usr/lib64)
# 由于该操作需要管理员权限,因此需要在命令之前加上sudo
# 这两个命令都可以
sudo mv 动态库文件名称 /lib64
sudo mv 动态库文件名称 /usr/lib64

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣热100 哈希

哈希 1. 两数之和49.字母异位词分组128.最长连续序列 1. 两数之和 题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。…

【NOI-题解】1326. 需要安排几位师傅加工零件1228. 排队打水问题1229. 拦截导弹的系统数量求解

文章目录 一、前言二、问题问题:1326. 需要安排几位师傅加工零件问题:1228. 排队打水问题问题:1229. 拦截导弹的系统数量求解 三、感谢 一、前言 本章节主要对贪心问题进行讲解,包括《1326. 需要安排几位师傅加工零件》《1228. 排…

每天五分钟深度学习:解决for循环效率慢的关键在于向量化

本文重点 上一节课程中,我们学习了多样本的线性回归模型,但是我们的伪代码实现中使用了大量的for循环,这样代码的问题是效率很低。为了克服这一瓶颈,向量化技术应运而生,成为提升程序执行效率、加速数据处理速度的重要手段。 向量化技术概述 向量化(Vectorization)是…

目标检测算法讲解:从传统方法到深度学习,全面解析检测技术的演进与应用!

在计算机视觉领域,目标检测是一个基本且关键的任务,它不仅涉及图像中对象的识别,还包括确定这些对象的具体位置。这一任务通常通过算法来实现,这些算法能够识别出图像中的一个或多个目标,并给出每个目标的类别和位置。…

Kafka-服务端-网络层-源码流程

整体架构如下所示: responseQueue不在RequestChannel中,在Processor中,每个Processor内部有一个responseQueue 客户端发送的请求被Acceptor转发给Processor处理处理器将请求放到RequestChannel的requestQueue中KafkaRequestHandler取出reque…

Python:Python简介

一、Python简介 1.Python的诞生 诞生:1989年圣诞节期间,Guido van Rossum为了打发圣诞节假期的无聊,便开始了Python语言的编写。 命名:Python第一个发行版本是在1991年,起名为Python是源自于Guido喜欢的一档电视节目…

英伟达经济学:云服务商在GPU上每花1美元 就能赚7美元

NVIDIA超大规模和 HPC 业务副总裁兼总经理 Ian Buck 近日在美国银行证券 2024 年全球技术大会上表示,客户正在投资数十亿美元购买新的NVIDIA硬件,以跟上更新的 AI 大模型的需求,从而提高收入和生产力。 Buck表示,竞相建设大型数据…

在 PostgreSQL 中强制执行连接顺序#postgresql认证

让我们首先创建一些表: PgSQL plan# SELECT CREATE TABLE x || id || (id int) FROM generate_series(1, 5) AS id;?column? --------------------------CREATE TABLE x1 (id int)CREATE TABLE x2 (id int)CREATE TABLE x3 (id int)CREATE TABLE…

Centos7网络配置(设置固定ip)

文章目录 1进入虚拟机设置选中【网络适配器】选择【NAT模式】2 进入windows【控制面板\网络和 Internet\网络和共享中心\更改适配器设置】设置网络状态。3 设置VM的【虚拟网络编辑器】4 设置系统网卡5 设置虚拟机固定IP 刚安装完系统,有的人尤其没有勾选自动网络配置…

解锁机器学习算法面试挑战课程

在这个课程中,我们将从基础知识出发,系统学习机器学习与算法的核心概念和实践技巧。通过大量案例分析和LeetCode算法题解,帮助您深入理解各种面试问题,并掌握解题技巧和面试技巧。无论是百面挑战还是LeetCode算法题,都…

VUE3解决跨域问题

本文基于vue3 vite element-plus pnpm 报错:**** has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 原因:前端不能直接访问其他IP,需要用vite.config.ts &#xff0…

仿美团饿了么程序,外卖人9.0商业版外卖订餐源码(PC+微信)

仿美团饿了么程序,外卖人9.0外卖订餐源码,PC微信WAP短信宝,多城市多色版 非常不错的独立版外卖跑腿网站源码,喜欢的可以下载调试看看吧!! 仿美团饿了么程序,外卖人9.0外卖订餐源码

鸿蒙开发Ability Kit(程序访问控制):【向用户申请单次授权】

申请使用受限权限 受限开放的权限通常是不允许三方应用申请的。当应用在申请权限来访问必要的资源时,发现部分权限的等级比应用APL等级高,开发者可以选择通过ACL方式来解决等级不匹配的问题,从而使用受限权限。 举例说明,如果应…

【面试干货】Static关键字的用法详解

【面试干货】Static关键字的用法详解 1、Static修饰内部类2、Static修饰方法3、Static修饰变量4、Static修饰代码块5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java编程语言中,static是一个关键字,它可…

【多模态LLM】以ViT进行视觉表征的多模态模型1(BLIP-2、InstructBLIP)

note CLIP和BLIP的区别: CLIP:通过对比学习联合训练,预测图像和文本之间的匹配关系。即使用双塔结构,分别对图像和文本编码,然后通过计算cos进行图文匹配。BLIP:包括两个单模态编码器(图像编码…

【TB作品】温湿度监控系统设计,ATMEGA16单片机,Proteus仿真

题2:温湿度监控系统设计 功能要求: 1)开机显示时间(小时、分)、时分可修改; 2)用两个滑动变阻器分别模拟温度传感器(测量范 围0-100度)与湿度传感器(0-100%),通过按键 可以在数码管切换显示当前温度值、湿度值; 3)当温度低于20度时,红灯长亮; 4)当湿度高于70%时,黄灯长亮; 5)当…

win11自动删除文件的问题,安全中心提示

win11自动删除文件的问题,解决方法: 1.点击任务栏上的开始图标,在显示的应用中,点击打开设置。 或者点击电脑右下角的开始也可以 2.点击设置。也可以按Wini打开设置窗口。 3.左侧点击隐私和安全性,右侧点击Windows安全…

如何开启Linux内核中的debug打印信息

如何开启Linux内核中的debug打印信息 Linux 内核中,日志等级定义在 include/linux/kern_levels.h 文件中。数值越小等级越高。 级别 对应内核日志级别 说明 0 KERN_EMERG 紧急消息。系统崩溃之前提示,表示系统已不可用。 1 KERN_ALERT 报告消息。表示必…

Redis 7.x 系列【13】数据类型之地理位置(Geospatial)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 GEOADD2.2 GEODIST2.3 GEORADIUS2.4 GEOPOS2.5 GEORADIUSBYMEM…

安卓实现微信聊天气泡

一搜没一个能用的&#xff0c;我来&#xff1a; 布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xml…