Linux动态库

2023-09-20 11:47:49

定义:动态函数库,是在程序执行时动态(临时)由目标程序去调用

优点:

调用时不复制,程序运行时动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。
程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。
缺点:

加载速度比静态库慢,占用内存大
版本更新麻烦,发布程序需要提供依赖的动态库
 

命名规则:动态库文件名的命名方式是“libxxx.so”,库名前加”lib”,后缀用”.so”,“xxx”为动态库名。

动态库的制作:

生成 .so 文件: gcc -shared -fpic SumSub.c -o libSum.so

 -shared :指定生成动态库

-fpic  标准:fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

动态库的使用: 

gcc main.c -lSumSub -L ./ 

-L告诉gcc编译器从-L制定的路径去找动态库。默认是从/usr/lib 或 /usr/local/lib去找,可以修改 ,如:gcc main.c -I ./include/ -L ./lib -lmycalc 

如果编译后无法运行:

提示找不到.so文件,需要把编译的动态库放到Linux的 /usr/lib

使用sudo cp libfilename.so /usr/lib 再次运行 

另一种常用方法: 设置指定动态库的临时位置(只能在当前位置使用):

 比如配置临时环境变量,只针对当前路径 export LD_LIBRARY_PATH="/home/pi/你的文件路径"

改进:

通过shell脚本命令,把环境变量和./main放进去,给脚本增加可执行权限:vi start.sh
写入: export LD_LIBRARY_PATH="/home/pi/你的文件路径"
./main

保存
增加权限:chmod +x start.sh
最后运行./start.sh

du xxx查看内存大小

更多推荐

mysql知识大全

MySQL知识大全(2)MySqL基础为1—7(增删改查基础语法),MySQL进阶知识为8—11(约束、数据库设计、多表查询、事务)1、数据库相关概念以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊端。假设在文件中存储以下的数据:姓名年龄性别住址张

Python案例实现|租房网站数据表的处理与分析

在综合实战项目中,“北京链家网”租房数据的抓取任务已在上一篇完成,得到了数据表bj_lianJia.csv,如图1所示。该数据表包含ID、城区名(district)、街道名(street)、小区名(community)、楼层信息(floor)、有无电梯(lift)、面积(area)、房屋朝向(toward)、户型(mo

leetcode 10. 正则表达式匹配

2023.9.20感觉是目前做过dp题里最难的一题了...本题首要的就是需要理解题意,翻了评论区我才发现之前一直理解的题意是错的。我原来理解的“*匹配0次”是指:*直接消失,不会影响到前面的字符。但是*和前一个字符其实是连体的,所以说:*如果匹配0次,那么前一个字符就没了,消失了;*如果匹配1次,那么才相当于*消失了,

【Python】PySpark 数据处理 ① ( PySpark 简介 | Apache Spark 简介 | Spark 的 Python 语言版本 PySpark | Python 语言场景 )

文章目录一、PySpark简介1、ApacheSpark简介2、Spark的Python语言版本PySpark3、PySpark应用场景4、Python语言使用场景一、PySpark简介1、ApacheSpark简介Spark是Apache软件基金会顶级项目,是开源的分布式大数据处理框架,专门用于大规模数据处理,是一款

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案

说明:1.博主电脑为Windows11操作系统,亲测有效,修改后无任何影响,软件都可以正常运行!2.Windows10系统还不知道可不可行,因为Windows11的计算机管理中没有本地用户和组,博主在csdn上看到很多博主有发Windows10的解决方案,有通过“注册表”的,也有通过“本地用户和组”的,大家可以自己去小

OpenCV实现“蓝线挑战“特效

原理算法原理可以分为三个流程:1、将视频(图像)从(顶->底)或(左->右)逐行(列)扫描图像。2、将扫描完成的行(列)像素重新生成定格图像。3、使用原帧图像像素填充未扫描到的像素。图像扫描首先第一步,拿到一个视频(很多帧图像)可以简单的看成图像处理。我们需要将图像从顶到底逐行进行像素扫描,当然也可以从左到右逐列扫描,

在服务器上创建git仓库

1、在服务器上创建git仓库选择一个创建文件夹的地方,这个地方不会将源码存放在这里,只用于版本控制#创建一个专门放置git的文件夹,也可以叫其它名mkdirgit&&cdgit#创建自己项目的文件夹,文件夹后面要带.gitmkdirmy_object.git&&cdmy_object.git#初始化gitinit--b

Vue3中如何通过内嵌iframe传递参数与接收参数

前言Vue3是一种用于构建用户界面的JavaScript框架,它提供了很多方便的功能和工具来开发交互式的Web应用程序。其中一个常见的需求是在Vue应用程序中内嵌一个iframe,并且需要在两者之间传递参数。本文将介绍如何在Vue3中实现此功能,包括如何在Vue组件中内嵌iframe以及如何传递参数和接收参数。内嵌if

虹科产品 | HK-ATTO 光纤通道卡利用FC-NVMe 提升全闪存存储阵列性能

一、虹科ATTO光纤通道HBA随着对高速数据访问和低延迟存储解决方案的需求日益增长,虹科ATTO最新的光纤通道创新技术带来了改变游戏规则的突破。原生光纤通道和第二代FC-NVMe标准使虹科ATTO光纤通道HBA能够提供无与伦比的速度和效率,显著加快全球数据中心的全闪存阵列性能。原生光纤通道支持可确保数据密集型共享工作负

redis常见问题

Redis的数据结构有哪些?请简要描述它们的特点和应用场景。答:Redis支持的数据结构包括字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(SortedSet)等。字符串是最基本的数据类型,可以存储文本或二进制数据。哈希表适合存储对象形式的数据,方便单独读写字段。列表可以用于实现

Redis 五大类型源码及底层实现

面试题:谈谈Redis数据类型的底层数据结构:SDS动态字符串双向链表玉缩列表ziplist哈希表hashtable跳表kiplist整数集合intset快速列表quicklist紧凑列表listpackRedis源代码的核心部分官网:GitHub-redis/redis:Redisisanin-memorydatab

热文推荐