Linux中库的概念,动态库,静态库

news2024/11/17 4:48:56

1.什么是库

        库在Linux中是一个二进制文件,它是由.cpp文件(不包含卖弄函数)编译而来,其他程序如果想要使用该源文件中的函数时,只需在编译生成可执行程序时,链接上该源文件生成的库文件即可。库中存储的是二进制文件,不容易被窃取只是产权,做到了保护作用给。

库在Linux中分为两类:静态库和动态库

        Windows:***.lib(静态库)。***.dll(动态库)。

        Linux:***.a(静态库)。***.so(动态库)

2.静态库及其制作

        概念:将一个***.cpp的文件编译生成一个lib***.a的二进制文件,当你需要使用该源文件中的函数时,只需要链接该库即可。后期可以直接调用

        静态体现:在使用g++编译程序时,会将你的文件和库最终生成一个可执行程序(把静态库也放到可执行程序中),每个可执行程序都有一个静态库,体积较大,但是,执行效率高

2.1准备程序

        add.h,add.cpp,.main.cpp

2.2编译生成静态库

        gcc  -c ***.c -o ***,o                //只编译不链接生成二进制文件

        ar -crs lib***.a ***.o                //编译生成静态库,.a文件依赖于.o文件

        如果有多个.o文件共同编译生成静态库: ar -crs lib***.a ***.o  ***.o xxx.o ...

        ar:用于生成静态库的指令

        c;用于创建静态库

        r:将文件插入或者替换静态库中同名文件

        s:重置静态库索引

2.3使用静态库

        gcc main.cpp -L  库的路径 -l库名 -I(i) 头文件的名字

点(.)表示在当前路径

 多路径经行编译

3.动态库及其制作

        概念:将一个***.cpp的文件编译生成一个lib***.so的二进制文件,当你需要使用该源文件中的函数时,只需要链接该库即可。后期可以直接调用

        静态体现:在使用g++编译程序时,会将你的源文件和库中相关函数的索引表一起生成一个可执行程序,每个可执行程序只拥有函数的索引表,当程序执行到对应函数时,会根据索引表,动态寻找相关库所在位置进行调用,体积较小,执行效率较低,但是可以多个程序共享同一个动态库,所以,动态库也叫共享库。

3.1准备程序

        add.h,add.cpp,.main.cpp

3.2编译生成动态库

        g++ -fpic -c ***.cpp -o  ***.o        //编译生成二进制文件

        g++ -shared  ***.o -o lib***.so        //依赖于二进制文件生成一个动态库

上述两个指令可以合成一个指令

        g++ -fpic -shared ***.cpp -o lib***.so

3.3使用动态库

    3.4以上错误的解决方式

        方式1:更改路径宏

                export  LD_LIBRARY_PATH=库的路径

方法2:将自己的动态库放入到系统的库函数目录中(/lib64                 /usr/lib64)

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

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

相关文章

【香橙派系列教程】(十六) 语音模块与阿里云结合

【十六】语音模块与阿里云结合 本小节实现功能使用语音模块和摄像头在香橙派上做垃圾智能分类识别。 大致流程:说出“识别垃圾类型”口令,语音模块接收到之后通过串口发送字符串指令,随后进行拍照(请确保香橙派已经驱动起来了摄…

2024/8/25 Nacos本机配置

目录 一、nacos下载 二、修改配置文件 2.1、配置数据库 2.2、配置鉴定密钥 2.3、配置启动脚本 三、nacos启动 3.1、启动运行脚本 3.2、新增配置 3.3、服务列表 记录一下本机nacos2.2.3配置全过程 一、nacos下载 下载地址:https://github.com/alibaba/nacos/r…

安灯系统赋能照明行业打造高效智能的生产管理体系

在当今竞争激烈的照明行业中,提高生产效率、确保产品质量以及实现智能化管理已成为企业生存和发展的关键。安灯系统作为一种先进的生产管理工具,正逐渐在照明行业中发挥着重要作用,为企业打造高效智能的生产管理体系提供有力支持。 一、照明行…

LeetCode31

206.反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3&#…

秋招TCP篇(较全的TCP网络知识,通俗理解底层逻辑)

TCP详细知识 计算机网络八股-局域网和广域网详解八股-OSI七层模型和TCP/IP五层模型八股-数据在网络之间传递的过程八股-UDP详解根据协议格式详解TCPSocket详解八股-TCP可靠性机制确认应答超时重传超时重传等待时间数据去重 八股-三次握手和四次挥手三次握手四次挥手为什么要三次…

系统之家官网网址:一键直达,安全无忧!

有很多用户反映自己搜搜系统之家,会出现很多网址,不知道哪个才是真正的系统之家官网网址?对于想要访问真正的系统之家官网,获取更多优质系统资源及解决相关系统问题的用户而言,记住系统之家的官网网址是至关重要。以下…

4款文章生成器,自动写作优质文章

在当今信息爆炸的时代,内容创作已经成为网络世界中不可或缺的一部分。然而,随着人们对高质量内容的需求不断增加,传统的手动创作已经无法满足市场的需求。因此,文章生成器应运而生,成为许多从业者和企业的利器。在本文…

公司图纸文件加密超详细的三大步骤,图纸加密软件最新推荐

随着企业信息化建设的不断深入,图纸文件成为了企业核心数据的重要组成部分。特别是在制造、建筑、设计等行业,CAD图纸文件承载了大量的商业秘密和技术机密。一旦这些图纸被泄露或未经授权地访问,企业将面临巨大的经济损失和声誉损害。因此&am…

【已解决】JS Uncaught DOMException: Failed to construct ‘Worker’ 所有场景

【已解决】JS Uncaught DOMException: Failed to construct ‘Worker’ 所有场景 概述 在JavaScript中,Web Workers允许我们运行后台脚本,这些脚本不会影响到页面的性能。然而,当我们尝试创建一个新的Worker时,有时会遇到“Uncau…

时钟同步方案的参考方案

网络时间服务器是为网络设备提供精确、标准、安全、可靠和多功能的时间服务的最佳解决方案,能提供精确的同步时钟信号,支持标准的NTP和SNTP网络对时协议,提供高精度的网络同步时钟直接来自于GPS系统中各个卫星的原子钟。 那么时钟同步方案我…

idea发送请求提示 无法保留 Cookie,cookie storage file is included in ignored list:

你们好,我是金金金。 场景 IDEA插件httpclient发起请求,提示如下 翻译如下:cookie存储文件被列入忽略列表 解决 查看下是不是你把.idea文件忽略显示了,忽略后会不检索 索引不知道所在位置,所以需要把.idea从忽略列表…

【python】如何通过Python中的http.server搭建文件上传下载服务

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

C++系列-泛型编程之类模板

泛型编程之类模板 类模板类模板的定义方式类模板的举例 类模板和函数模板的区别类模板中的成员函数创建时机类模板的对象做函数的参数指定传入类型类中的参数模板化整个类模板化 类模板与继承类模板中成员函数的类外实现类模板分文件编写类模板分文件编写的问题问题原因解决方案…

Java框架myBatis(二)

一、#{}和${}的区别 #{}所采取的时占位符方式(底层是预编译模式),与JDBC中的?方式相同,传参更加方便安全 ,防止了sql注入。当我们需要向sql传值,使用#{}; ${}是将内容直接拼接到sql…

Uniapp 微信小程序,实现页面滚动Tab悬停吸顶,点击tab内容跟随滚动

Uniapp 微信小程序,实现页面滚动Tab悬停吸顶,点击tab内容跟随滚动 页面股东tab悬停原理: 运用uniapp原生提供方法uni.createSelectorQuery()获取滚动对应节点的信息,即节点距离页面顶部的距离,再通过uniapp原生监听页…

【C语言】深入理解指针(一)

指针1 1.内存和地址2.指针变量和地址2.1取地址操作符(&)2.2指针变量和将引用操作符2.3解引用操作符2.4指针变量的大小 3.指针变量类型的意义3.1指针变量类型3.2void*指针 4.const修饰指针5.指针运算5.1 指针- 整数5.2指针-指针3.指针的关系运算 6.野…

《高等代数》最大公因式典型例题

说明:此内容用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:这道题主要从 1)公因式整除多项式的线性组合 2)最大公因式能够被其它公因式整除 3)如果两个多项式互相整除,那就说明这两个多项式相等 这三个知识点出…

Hadoop的HA配置与实现(ZooKeeper)

目录 一、Hadoop的HA架构二、配置实现Hadoop的HA三、效果 一、Hadoop的HA架构 集群规划 112:NameNode1 ResourceManager1 JournalNode1 113:NameNode2 ResourceManager2 JournalNode2 114:DataNode1 NodeManager1 115:DataNode2 N…

如何快速建30个文件夹

文件夹的快速新建只能通过专门的软件来实现,快速建30个,我们可以使用批处理命令,也可以用第三方软件,批处理的命令,需要我们熟悉如何编写,而第三方软件的话不需要那么多的知识,直接在软件上一键…

货运搬家小程序app定制开发过程中需要的主要功能介绍

货运搬家小程序是一个集成了物流服务全过程的数字化解决方案,它通过移动平台提供注册与登录、货物管理、车辆管理、路线规划、货物分配、订单管理、实时追踪、评价与反馈、价格透明等功能。 具体的功能: 注册与登录用户可以通过小程序注册账号并登录&am…