Linux下库的入门与制作

2023-09-20 11:13:06


参考博文
1. Linux中的库
2. Linux共享库、静态库、动态库详解

1. 库的介绍

介绍
  程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries)

静态库是在程序执行前(编译)就加入到目标程序中去了

优点:

  • 静态库被打包到应用程序中加载速度快
  • 发布程序无需提供静态库,因为已经在app中,移植方便

缺点:

  • 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
  • 更新、部署、发布麻烦

动态库:动态函数库,是在程序执行时动态(临时)由目标程序去调用
  同共享函数库是一个东西(在linux上叫共享对象库,文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)
  
优点:

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

缺点:

  • 加载速度比静态库
  • 发布程序需要提供依赖的动态库

2. 库的制作与使用

2.1 静态库的制作与使用

1. 库的制作
  格式 xxxx.a

  • 将C文件生成.o 文件:gcc fun.c -c
  • 将.o打包:
    ar rcs 静态库的名字 原材料
    ar rcs libfun.a fun.o

2. 库的使用

  • -l:指定库的名字(砍头去尾,去掉lib和.a)
  • -L: 指定库的路径,./表当前路径
    gcc main.c -l fun -L ./
    

2.2 动态库的制作与使用

1. 动态库的制作
  将源文件生成.o文件,需要加参数shared动态库和fpic标准

gcc -shared -fpic fun.c -o libfun.so
  • shared:指定生成动态库
  • fpic:是一个标准,fpic选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。

使用

gcc main.c -l fun -L ./ 

运行程序:
方案一: 将动态库放入 /usr/lib目录下后运行程序

sudo cp libfun.so /usr/lib/

方案二: 通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。

export LD_LIBRARY_PATH="/home/pi/study/demo1"

临时的,解决方案->脚本
给脚本加可执行权限:

chmod +x start.sh 
更多推荐

[maven] maven 简述及使用 maven 管理单个项目

maven简述及使用maven管理单个项目简单的说就是maven是一个项目管理工具,同时也是一个依赖管理工具。使用maven生成的项目结构大致如下:project|-src/main/java|-src/main/resources|-src/test/java|-src/test/resources本篇笔记带一些核心

华为云云耀云服务器L实例评测|docker私有仓库部署手册

【软件安装版本】【集群安装(是)(否)】版本号文档编写文档审核创建日期修改日期1.0jzgjzg2023.9.13一.部署规划与架构1.规划:(集群:网络规划,服务器规划)环境:华为云云耀云服务器L实例,非集群方式网络:公网ipv4地址;内网:192.168.0.147网络需要配置安全组使用环境:内网,不适合生产环境使

如何导出数据库数据字典

1、随便找一个工程项目,在项目build.gradle配置文件添加以下依赖compilegroup:'cn.smallbun.screw',name:'screw-core',version:'1.0.5'2、刷新下载依赖3、将以下代码拷贝到工程任意Java目录ScrewDemo.javapackagecom.xxx;

区块链的使用场景和优势

区块链技术是一种基于分布式数据库、密码学和去中心化结构的新型计算模式,其具有以下应用场景和优势:应用场景:1.数字货币:比特币、以太坊等数字货币系统能够实现去中心化、快速高效的支付功能。2.数字身份认证:基于区块链的数字身份认证系统可以提高身份认证的安全性,同时保护隐私。3.供应链管理:区块链技术可以实现对物流、采购、

为什么需要工业物联网 (IIoT)?如何实施?

制造业数字化、网络化、智能化已经是大势所趋。这些特性都在改变着制造业的格局,进而影响着我们生活和工作的方式。工业物联网作为一种利用传感器、云计算、大数据和人工智能等技术,实现了工业设备、流程和服务的智能化,正逐渐成为制造业的发展趋势。本文将进一步探讨工业物联网的特征、工业物联网带来的好处以及如何实施工业物联网。什么是工

陕西省中级工程师职称评审

一.评审范围全省范围具有合法生产,经营手续的中小企业局和非公有制经济从事工程师工作专业技术人员和高技能人员,均可申报当年达到法定退休或已办退休的人员,不大参加职称评审。评审专业领域;机械,材料,冶金,电气,电子,信息通信,仪器仪表,能源动力,控制工程,计算机,自动化,人工智能,广播电视,建设,土木,水利,测绘,化工,地

【Vue.js】快速入门与工作生命周期的使用

🎬艳艳耶✌️:个人主页🔥个人专栏:《Spring与Mybatis集成整合》《springMvc使用》⛺️生活的理想,为了不断更新自己!目录​编辑1.Vue是什么2.Vue的特点及优势3.使用Vue的详细步骤3.1.导入3.2.定义边界3.创建vue实例4.Vue的基本语法4.1v-model4.2v-bind:va

Linux深度学习问题汇总

解决Ubuntu中root账户下tab失效的问题在Ubuntu中,出于安全考虑,默认情况下root用户是被禁用的。当你使用sudo或sudosu成为root用户时,有时可能会发现某些方便的功能,例如tab键自动补全,不工作。这可能是由于几个原因:缺少bash-completion包:bash-completion是一个

【重新定义matlab强大系列十三】直方图 bin 计数和分 bin 散点图

🔗运行环境:Matlab🚩撰写作者:左手の明天🥇精选专栏:《python》🔥推荐专栏:《算法研究》####防伪水印——左手の明天####💗大家好🤗🤗🤗,我是左手の明天!好久不见💗💗今天开启新的系列——重新定义matlab强大系列💗📆最近更新:2023年09月17日,左手の明天的第290篇原创博客

中尺度混凝土二维有限元求解——运行弯曲、运行光盘、运行比较、运行半圆形(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述中尺度混凝土二维有限元求解是一种常见的工程分析方法

CDH 集群离线部署、大数据组件安装与扩容详细步骤(cdh-6.3.1)

一、环境准备1、服务器配置和角色规划IP地址主机名硬件配置操作系统安装步骤10.168.168.1cm-server8C16GCentos7新建10.168.168.2agent018C16GCentos7新建10.168.168.3agent028C16GCentos7新建10.168.168.4agent038C1

热文推荐