Linux 共享库 静态库 动态库

news2024/11/17 23:57:47

一、

静态库(后缀.a):程序执行前(编译)就加入到目标程序中去了

优点:运行速度快,发布程序无需提供静态库,因为已经在编译到目标程序中,运行的时候可以直接运行,移植方便

缺点:太占内存,多次复用就会有多份拷贝

动态库和共享函数库是一个东西:(Linux上叫做共享函数库,文件后缀是.so,windows叫做动态函数库,后缀是.dill)在执行时动态加载(临时)有目标程序去调用

缺点:运行速度慢

优点:多个程序可共用,节省内存

二、

1.静态库的制作:格式:xxxxx.a

 gcc xxxx.c -c //生成.o文件

 ar rcs libxxx.a xxxx.o//生成.a文件(静态库文件)

2.静态库的使用(砍头去尾:libaddfunc.a -----> -laddfunc,动态链接的方式使用)

gcc add_main.c -laddfunc -L ./  -o staticadd     

-L ./的意思是优先在当前路径去寻找,如果只是-laddfunc,运行时会优先去/usr/local/lib路径下寻找,编译不加-L ./ 会报错 

 -o staticadd 是生成可编译文件,就不用./a.out了 ./staticadd就可以执行了

3.动态库的制作:libxxx.so

命名规则:libname.so.x.y.z

lib:表示共享库(动态库)

name:共享库名字

.so:固定后缀

.x:主版本号

.y:次版本号

.z:发行版本号

gcc -shared -fpic xxx.c -o libxxx.so

-shared:生成动态库

-fpic:是一种标准,用作编译阶段,生成目标文件时使用,生成位置无关的代码

 

但是编译动态库会出现这个问题,动态库只能去/usr/lib路径下寻找

所以使用动态库时必须指定路径:可以在环境变量中加一行这个:

export LD_LIBRARY_PATH="/home/pi",但是有一个问题是环境变量只能在当前页面使用,克隆一个会话时不能使用的 /home/pi是当前目录

所以我们可以写一个shell脚本,把两个命令连起来

 再加上可运行权限

运行./start.sh即可 

 

 

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

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

相关文章

【Java】Eclipse的安装和JDK的安装与配置教程

Java是能够跨越多平台的、可移植性高的一种面向对象的编程语言,其简单易学、功能强大,越来越多的程序员喜欢加入Java的阵营之中。 一、前言 Java具有以下功能特点: 跨平台性:Java程序可以在任何支持Java虚拟机(JVM&am…

C. Increasing by Modulo(贪心 + 二分)

Problem - C - Codeforces Toad Zitz有一个整数数组,每个整数都在0到m-1的范围内。这些整数是a1,a2...an。 在一次操作中,,iz可以选择一个整数k和k个萦引1..k,使得1si i2. ..fiksn。然后他应该将每个选定的整数a刘j 更改为(aj 1lmodm)。整数m对于所有操作…

初识STL

长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计&am…

(C语言版)力扣(LeetCode)27.移除元素三种解法分析

移除元素 题目第一种解法:有效值前移第二种解法:双指针第三种解法:双指针优化结语 题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空…

【C++】vector OJ练习

文章目录 1. 只出现一次的数字思路讲解AC代码 2. 杨辉三角思路讲解AC代码 3. 只出现一次的数字 III思路讲解AC代码 4. 只出现一次的数字 II思路讲解AC代码 5. 删除有序数组中的重复项思路讲解AC代码 6. 数组中出现次数超过一半的数字思路讲解AC代码 这篇文章我们来做几道vector…

Jenkins学习笔记

Jenkins学习笔记 1、基本概念 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 2、安装 文件包:https://pan.…

半监督目标检测

有监督目标检测: 拥有大规模带标签的数据,包括完整的实例级别的标注,即包含坐标和类别信息;弱监督目标检测: 数据集中的标注仅包含类别信息,不包含坐标信息,如图一 b 所示;弱半监督目…

RHCE-防火墙

目录 一、防火墙介绍 1.1、什么是防火墙 1.2、防火墙的功能: 1.3、linux防火墙的架构 二、iptables 2.1iptables介绍 2.2名词术语: 什么是容器? 什么是Netfilter/Iptables? 什么是表(tables)&#x…

学历到底是敲门砖还是枷锁?—探讨“孔乙己文学”热搜背后的教育话题

序言 最近,“孔乙己文学”一度成为网络热门话题,引起了不少人的讨论。其中,一句“学历不仅是敲门砖,也是我下不来的高台,更是孔乙己脱不下的长衫”引发了广泛共鸣,让人深思。 敲门砖 or 枷锁? 对…

黑盒测试过程中【测试方法】详解4-因果图

在黑盒测试过程中,有9种常用的方法:1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 黑盒测试过程中【测试方法】讲解1-等价类,边界值,判定表_朝一…

大模型竞争加剧,国内外 AI 监管进一步升级

随着人工智能技术的不断发展,大模型已成为当下最热门的话题之一。不仅国内外的科技公司都在积极投入研发,各国政府也在加大监管力度,以确保人工智能技术的安全和可持续发展。本文将从三个层次分别探讨大模型的定义和热度、国内外AI监管的现状…

【STM32】基础知识 第八课 MDK 工程

【STM32】基础知识 第八课 MDK 工程 准备工作新建寄存器版本 MDK 工程步骤新建工程文件夹添加文件魔术棒设置绝对路径和相对路径对比测试程序 新建 HAL 库版本 MDK 工程CMSISHAL 库简介DriversMiddlewaresDevice 和 Include HAL 库文件介绍HAL 库 API 函数和比那辆命名规则HAL …

Fedora 38 正式发布

Fedora Linux 38 正式发布,用户可以访问官网下载安装最新版本。 新网站 如果你点击了上面的官网链接,你应该会注意到 Fedora 的官网看起来与之前有了很大不同。这是 Fedora Websites & Apps 团队与 Design & Infrastructure 团队以及广大社区合作…

HCIA-RS实验-ENSP搭建一个基础的IP网络

HCIA-RS是华为认证网络工程师(Routing & Switching)的缩写。通过考取HCIA-RS证书,可以证明自己有能力设计、实现和维护小型网络。而HCIA-RS实验则是考试的一部分,是考生必须要完成的实践环节。这将是第一篇文章,后…

Qt连接MySQL数据库最详细的教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.直接通过MySQL的驱动加载数据库1)所需代码2)解决QMYSQL driver not loaded 2.通过ODBC连接MySQL数据库1)官方解释2…

如何react中使用redux和react-redux

Redux Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 可以让你构建一致化的应用,运行于不同的环境(客户端、服务器、原生应用),并且易于测试。 不仅于此,它还提供 超爽的开发体验,比…

指针可以这样认知

注:此篇文章仅限初步了解,本小白后续会持续进行详解指针的相关操作。 目录: 认知内存一个内存单元的大小地址的产生 理解指针用途 指针变量的大小💞结尾 了解指针为什么需要了解内存呢? 因为指针是用来管理内存&#x…

【k8s】ruoyi微服务迁移到k8s

书接上回【传统方式部署Ruoyi微服务】,此刻要迁移至k8s。 环境说明 31 master , 32 node1 , 33 node2迁移思路 交付思路: 其实和交付到Linux主机上是一样的,无外乎将这些微服务都做成了Docker镜像; 1、微服务数据层: MySQL、 R…

聊聊 IP packet 的 TTL 与 tcp segment 的 MSL

聊聊 IP packet 的 TTL 与 tcp segment 的 MSL 1 前言 - 网络知识的重要性 近几年在排查解决应用系统在客户现场遇到的复杂问题时,越来越觉得除了扎实的LINUX操作系统知识,对TCP/IP网络知识的深入理解也是至关重要的。 有鉴于此,后续笔者会…

排序算法---插入排序

插入排序是一种简单的排序算法,一般又称为直接插入排序。插入排序的思想与选择排序有些相似,即在原数组上将数组分为两个部分:已排列好的有序数组和待排列数组,选择排序强调的是“选择”,而插入排序强调的是”插入“&a…