Linux编程(5)_静态库与动态库
1 库是什么
假如你写了一个perfect的项目, 有公司想要购买的你的源代码, 此时你肯定不想把你的源代码就这么给别人, 你只想让别人使用就够了.
那么你可以把的源代码生成为.o二进制文件, 封装成库, 这样别人既可以使用, 你的源代码也不会泄露. 而且c的二进制文件很难反编译, java则比较容易…
- 二进制文件
- 将源代码 ->> 二进制格式的源代码
- 加密
库的使用需要头文件与库文件
2 静态库.a
的制作和使用
2.1 命名规则 :
由三部分组成 : libxxx.a
xxx 为库的名字
2.2 制作步骤
- 源代码( c, cpp)
- 生成二进制文件(.o)
gcc hello.c -c
- 将.o打包, 用到工具ar, archive(归档),
ar rcs 静态库的名字 原文件
, 例 :ar rcs libtest.a hello.o
nm libtest.a
查看静态库里的内容
2.3 库的使用
gcc main.c -I ./ -L./lib -lmycalc-o app
-L
: 指定库的路径-l
: 指定库的名字(掐头去尾)-I
: 指定头文件的路径-o
: 指引生成文件的名字
3 动态库.so
的制作和使用
3.1 命名规则
libxxx.so
: xxx库的名称
3.2 制作步骤
将源文件生成二进制文件.o
gcc a.c b.c -c -fpic(fPIC)
打包
gcc -shared a.o b.o -o libxxx.so
3.3 库的使用
需头文件a.h
需动态库 libtest.so
gcc main.c -I ./include -L ./lib -l test -o app
-I
: 指定头文件的路径-L
: 指定库的路径-l
: 指定库的名字(掐头去尾)-o
: 指引生成文件的名字ldd app
查看可执行程序运行时需要哪些库
3.4 动态库加载
1 使用环境变量 env中PATH
- 临时设置 :
- 在终端中
export LD_LIBRARY_PATH=动态库路径:$LD_LIBRARY_PATH
- $是取值符, 冒号拼接, 以免覆盖里面本来就有的值
- 在终端中
永久设置 :
用户级别
- 写入语句 ~/.bashrc
- 然后重启中终端 或 source ~/.bashrc
系统级别
- /etc/profile
- 重启系统 或 source /etc/profile
2 更新/etc/la.socache文件列表
适用于长期不变
- 找到配置文件/etc/ld.so.conf
- 把动态库的绝对路径写入
- 执行命令
sudo ldconfig [-v](显示信息)
3 调用函数
dlopen, dlclose, dlsym
4 静态库, 动态库优缺点
4.1 静态库
1 优点
- 静态库被打包到应用程序中加载速度快
- 发布程序无需提供静态库, 移植方便
2 缺点
- 浪费系统资源, 浪费内存, 不同应用程序存在大量重复的库, 一位各自绑定在一起, 严重浪费内存
- 更新, 部署 , 发布麻烦, 更新的话需要用户重新安装程序
4.2 动态库的优缺点
app制作好了之后, 动态库没有打包到app里, 动态库不会在开始被加载, 只当程序调用动态库中的函数时才会被加载. 程序运行之前会先判断库是否存在. 通过动态链接器ld-linux-x86-64.so
1 优点
- 可实现进程间的资源共享
- 程序升级简单
- 可控制何时加载动态库
2 缺点
- 加载速度比静态库慢
- 发布程序需要提供相应动态库
Linux编程(5)_静态库与动态库相关推荐
- linux分文件编程、静态库与动态库
参考:linux静态库与动态库编程 作者:丶PURSUING 发布时间:2021-02-02 16:51:49 网址:https://blog.csdn.net/weixin_44742824/art ...
- Linux静态库与动态库的相关概念以及编程
一.分模块编程: 当我们在实现一个项目的时候,比如wifi小车,我们会碰到超声波模块,电机模块,wifi模块等模块的开发,这时候,我们可以让不同的小组成员来完成不同的模块,作为项目负责人只需要调用他们 ...
- 【Linux系统编程学习】 静态库与动态库的对比与总结
此为牛客网Linux C++课程 1.9 的课程笔记. 1. 前几节课知识总结 程序编译成为可执行文件的过程: 静态库制作过程: 动态库制作过程: 2. 静态库的优缺点: 3. 动态库的优缺点: 更多 ...
- C 语言编程 — 静态库、动态库和共享库
目录 文章目录 目录 文章目录 程序函数库 静态链接 创建静态库文件 动态链接 创建共享库文件 共享库文件的名字 共享库文件的存储路径 LD_LIBRARY_PATH 环境变量 ldconfig 指令 ...
- Linux中gcc的编译、静态库和动态库的制作
欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...
- Linux 之三 静态库及动态库的编写和使用
最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
在Linux下如何使用GCC编译程序.简单生成 静态库及动态库. 本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...
- Linux 静态库和动态库的生成及使用
1.分文件编程 分模块的编程思想:假设一个项目需要用到网络.超声波.电机,程序不是都杂糅在同一个文件,而是将网络.超声波.电机需要调用的函数写在不同文件里,在主文件中直接调用即可. 好处: a.功能责 ...
- 【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库
一.Introduction 1.1 C语言标准库 1.2 历代C语言标准 1.3 主流C语言编译器 二.C语言标准库 2.1 常用标准头文件 2.2 常用标准静态库 三.windows平台 四.Li ...
最新文章
- vue 数据更新不及时_陈词懒调的《未来天王》正式完结,再也不用担心她更新不及时了!...
- 怎样在php中使用PDF文档功能
- php 可维护性的代码,软件的可复用性和可维护性
- android jni java调用c,Android与JNI(一) ---- Java调用C 静态调用
- Angular的NgModule
- Mybatis解析(面试题)
- pytorch求范数函数——torch.norm
- android刷机工具 原理,Android 设备刷机教程
- python网络爬虫入门(三)—— 做个简陋的pixabay 图片下载器
- 在线客服系统对接微信小程序(客服消息推送)
- WebGIS期末复习
- WPF--3Dmax+blend+WPF综合运用
- padStart(),padEnd()方法
- 转:探寻问题背后的问题——提问的4个正确姿势
- js对json、xml字符串格式化(美化增强可读性)
- 单元格里设置自动换行及调整行间距
- Kinect v2.0原理介绍之八:高清面部帧(1) FACS 介绍
- Error creating bean with name ‘ds1-sentinel-nacos-datasource‘:
- C#遍历ComboBox的内容:
- 实习时间的吃吃吃总结...