1 库是什么

假如你写了一个perfect的项目, 有公司想要购买的你的源代码, 此时你肯定不想把你的源代码就这么给别人, 你只想让别人使用就够了.

那么你可以把的源代码生成为.o二进制文件, 封装成库, 这样别人既可以使用, 你的源代码也不会泄露. 而且c的二进制文件很难反编译, java则比较容易…

  • 二进制文件
  • 将源代码 ->> 二进制格式的源代码
  • 加密

库的使用需要头文件与库文件

2 静态库.a的制作和使用

2.1 命名规则 :

由三部分组成 : libxxx.a xxx 为库的名字

2.2 制作步骤

  1. 源代码( c, cpp)
  2. 生成二进制文件(.o) gcc hello.c -c
  3. 将.o打包, 用到工具ar, archive(归档), ar rcs 静态库的名字 原文件 , 例 : ar rcs libtest.a hello.o
  4. 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 制作步骤

  1. 将源文件生成二进制文件.o

    gcc a.c b.c -c -fpic(fPIC)

  2. 打包

    gcc -shared a.o b.o -o libxxx.so

3.3 库的使用

  1. 需头文件a.h

  2. 需动态库 libtest.so

  3. 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)_静态库与动态库相关推荐

  1. linux分文件编程、静态库与动态库

    参考:linux静态库与动态库编程 作者:丶PURSUING 发布时间:2021-02-02 16:51:49 网址:https://blog.csdn.net/weixin_44742824/art ...

  2. Linux静态库与动态库的相关概念以及编程

    一.分模块编程: 当我们在实现一个项目的时候,比如wifi小车,我们会碰到超声波模块,电机模块,wifi模块等模块的开发,这时候,我们可以让不同的小组成员来完成不同的模块,作为项目负责人只需要调用他们 ...

  3. 【Linux系统编程学习】 静态库与动态库的对比与总结

    此为牛客网Linux C++课程 1.9 的课程笔记. 1. 前几节课知识总结 程序编译成为可执行文件的过程: 静态库制作过程: 动态库制作过程: 2. 静态库的优缺点: 3. 动态库的优缺点: 更多 ...

  4. C 语言编程 — 静态库、动态库和共享库

    目录 文章目录 目录 文章目录 程序函数库 静态链接 创建静态库文件 动态链接 创建共享库文件 共享库文件的名字 共享库文件的存储路径 LD_LIBRARY_PATH 环境变量 ldconfig 指令 ...

  5. Linux中gcc的编译、静态库和动态库的制作

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...

  6. Linux 之三 静态库及动态库的编写和使用

      最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...

  7. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  8. Linux 静态库和动态库的生成及使用

    1.分文件编程 分模块的编程思想:假设一个项目需要用到网络.超声波.电机,程序不是都杂糅在同一个文件,而是将网络.超声波.电机需要调用的函数写在不同文件里,在主文件中直接调用即可. 好处: a.功能责 ...

  9. 【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库

    一.Introduction 1.1 C语言标准库 1.2 历代C语言标准 1.3 主流C语言编译器 二.C语言标准库 2.1 常用标准头文件 2.2 常用标准静态库 三.windows平台 四.Li ...

最新文章

  1. vue 数据更新不及时_陈词懒调的《未来天王》正式完结,再也不用担心她更新不及时了!...
  2. 怎样在php中使用PDF文档功能
  3. php 可维护性的代码,软件的可复用性和可维护性
  4. android jni java调用c,Android与JNI(一) ---- Java调用C 静态调用
  5. Angular的NgModule
  6. Mybatis解析(面试题)
  7. pytorch求范数函数——torch.norm
  8. android刷机工具 原理,Android 设备刷机教程
  9. python网络爬虫入门(三)—— 做个简陋的pixabay 图片下载器
  10. 在线客服系统对接微信小程序(客服消息推送)
  11. WebGIS期末复习
  12. WPF--3Dmax+blend+WPF综合运用
  13. padStart(),padEnd()方法
  14. 转:探寻问题背后的问题——提问的4个正确姿势
  15. js对json、xml字符串格式化(美化增强可读性)
  16. 单元格里设置自动换行及调整行间距
  17. Kinect v2.0原理介绍之八:高清面部帧(1) FACS 介绍
  18. Error creating bean with name ‘ds1-sentinel-nacos-datasource‘:
  19. C#遍历ComboBox的内容:
  20. 实习时间的吃吃吃总结...

热门文章

  1. classpath目录
  2. sring-list-del-string-int:解析左右编码器的,和#号
  3. 徐中约与《中国近代史》 (zz)
  4. sea.js常用接口
  5. linux初始化进程
  6. .NET环境下几种不同的邮件发送解决方案
  7. 超越村后端开发(7:修改完善代码(持续更新))
  8. 1.2_配置Python基本环境
  9. Excel VBA 操作 复制拷贝操作
  10. firefox os 2.0版模拟器QQ初体验