树莓派静态库和动态库的生成和使用

2023-11-03

静态库: 编译时就加入库文件,运行快,但是更新版本操作较麻烦

动态库: 程序运行时动态加载的库文件,供给调用程序使用,只调用一次,多个程序可使用,节省内存,因为APP里面没有库文件源码,升级时只要库的名字不变,函数名和参数不变,只是实现做了优化,就可以再次调用(动态函数库,共享函数库是一个东西,在Linux上叫共享对象库,文件后缀是.so Windows上叫动态加载函数库,文件后缀是.dll)

静态库的制作:
gcc filename.c -c      生成.o文件
ar rcs libfilename.a filename.o      生成.a文件
静态库的使用:
只需向用户提供filename.a 和filename.h
用户编译: gcc main.c -lfilename -L ./ 
编译链库时要砍头(lib)去尾(.a)
-L是去当前路径查找


动态库的制作:
生成.so文件:
gcc -shared -fpic filename.c -o libfilename.so
-shared 指定生成动态库
-fpic 用作编译阶段,在生成目标文件时使用该项生成位置无关代码
用户使用:
gcc main.c -lfilename -L ./

编译后无法运行:
提示找不到.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 main
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派静态库和动态库的生成和使用 的相关文章

随机推荐

  • 世界杯数据可视化分析

    目录 1 数据来源 2 字段解释 世界杯成绩信息表 WorldCupsSummary 世界杯比赛比分汇总表 WorldCupMatches csv 世界杯球员信息表 WorldCupPlayers csv 3 数据分析及可视化 世界杯已经告
  • 【教程】华南理工大学校园网登录抓包和协议模拟

    每次手动登录特别麻烦 而且时不时断一下 因此搞个脚本让它定时监测 断开重连比较方便 这里不讲这个脚本怎么写 只记录一下登录时的抓包内容 蒜了 直接上解析吧 也不复杂 相信大家一目了然 目录 抓包分析 postman测试请求 python模拟
  • 联想服务器如何恢复预装系统,Thinkcentre E73 E63z等预装Win7系统如何恢复出厂系统...

    故障现象 Thinkcentre系列机型 如E73 E63z等机型 随机预装win7系统如何恢复出厂系统的操作方法 解决方案 适应机型 E73 E73s E63z E93z等thinkcentre机型 适应操作系统 随机预装的Windows
  • spring boot判断需要跳转的页面文件是否存在

    在Spring Boot项目中 你可以使用ResourceLoader来判断要跳转的页面HTML路径文件是否存在 首先 你需要注入ResourceLoader到你的类中 可以使用 Autowired注解进行依赖注入 如下所示 Autowir
  • windows下搭载apache+svn服务器

    原文地址 http www cnblogs com ricksun articles 1564905 html 花了72小时 终于把 Subversion 初步掌握了 从一个连 什么是版本控制 都不知道的门外汉 到配置出精确至每目录访问的入
  • 关于AI如何实现短视频制作的方案仅供参考

    随着短视频平台的红火 短视频制作逐渐成为了大众娱乐的主流之一 同时也孕育出了巨大的商业价值 但是 短视频制作的过程需要消耗大量人力 物力 时间 并且需要调整画面的色彩 亮度 饱和度等因素 让整个过程显得较为复杂 因此 采用 AI 技术来实现
  • php-event 文档,@event

    event 描述 描述一个事件 语法 event event 概述 描述一个事件 event标签允许您描述一个可触发的事件 一个典型的事件是由对象定义的一组属性来表示 标签来定义事件的具体类型 您可以使用 fires标记 以表明这个种方法可
  • mysql isamchk_MySQL之myisamchk

    Description check and repair of MyISAM tables Used without options all tables on the command will be checked for errors
  • Microsemi 2017 Q2 招聘

    有意者发送简历到 dong zhang microsemi com Position Staff ASIC Design Engineer Business Unit ESC PerformanceStorage Location Shan
  • ajax循环输出,Ajax轮询 select循环输出

    弹出层 del color red addname color 337ab7 款项名目操作 vo name 删除 添加 addname on click function layer prompt title 添加款项名目 formType
  • 半导体学习——三极管正确理解

    学习三极管时候的问题 1 能量不是守恒的吗 为什么三极管会有放大电路的效果 2 既然是PNP型或者是NPN型 那么总有一个PN结是反向偏置的 那么电流是如何通过这个反向偏置的PN结到达集电极的呢 1 三极管的 放大 并不是把小电流变成大电流
  • paramiko.ssh_exception.SSHException: EOF during negotiation

    查找sftp server的位置 sudo find name sftp server usr lib openssh sftp server 然后查看ssh的配置文件 sudo vim etc ssh sshd config 找到配置文件
  • Java8 stream 对List<Map<String,Object>> 去重、过滤、排序等操作

    1 去重 List
  • 业务敏捷与SOA

    Web2 0催生广泛的蝴蝶效应 亚洲蝴蝶拍拍翅膀 将使美洲几个月后出现比狂风还厉害的龙卷风 蝴蝶效应触发了六十年代对混沌理论的广泛关注 过去十几年 由圣菲研究所发起的复杂性理 论的研究也在对传统经济学发起挑战 有位经济学家还专门写了本 蝴蝶
  • 找不到msvcp120dll,无法继续执行代码,怎么解决?

    当msvcp120 dll文件丢失或找不到时 会导致无法运行使用C 编写的程序 这可能是由于以下原因导致的 1 删除或移动文件 如果你不小心删除了或移动了msvcp120 dll文件 你将无法找到它并加载它 从而导致程序无法正常运行 2 文
  • 使用docker编排容器

    使用Dockerfile构建一个自定义的nginx 首先用docker拉一个nginx镜像 docker pull nginx 拉取完成后 编辑一个Dockerfile文件 vim Dockerfile 命令如下所示 FROM 后面跟的你的
  • Python---copy()、deepcopy()与赋值的区别

    copy 与deepcopy 之间的主要区别是python对数据的存储方式 首先直接上结论 深复制 即将被复制对象完全再复制一遍作为独立的新个体单独存在 所以改变原有被复制对象不会对已经复制出来的新对象产生影响 而等于赋值 并不会产生一个独
  • jmeter的安装与配置环境变量_win7系统

    一 jmeter篇 1 安装JDK ps JMeter是纯java应用程序 需要配置Java环境才能正常运行 JVM1 8或者更高版本 注 JMeter3 2版本 要求jdk1 8及以上 官网 https www oracle com te
  • linux rar解压命令

    一 简介 解压缩是一个常用的操作 在 Linux 中通常比较常用的是 tar 命令 zip 和 rar 命令则是 Windows 中比较常用 二 快速使用 1 tar 命令 语法 tar 主选项 辅选项 文件或目录 示例 压缩文件 file
  • 树莓派静态库和动态库的生成和使用

    静态库 编译时就加入库文件 运行快 但是更新版本操作较麻烦 动态库 程序运行时动态加载的库文件 供给调用程序使用 只调用一次 多个程序可使用 节省内存 因为APP里面没有库文件源码 升级时只要库的名字不变 函数名和参数不变 只是实现做了优化