Linux中库的分类与作用及制作
Linux 作用 分类 制作
2023-09-11 14:21:43 时间
一、库函数
- 什么是库函数:库在linux中以二进制的形式存在,在编译的时候需要链接这些库文件
- 库函数的作用:库文件是一些函数的集合,将我们函数的具体内容进行封装,仅对外提供一个调用的接口,给用户使用(即用户不需要知道函数是如何实现的,只需要调用即可)
- 库分类:
- 1、静态库(.a文件): libxxx.a 编译的时候,把这个函数链接到可执行程序里去,编译后的可执行文件较大
- 2、动态库(.so文件):libxxx.so 编译的时候,没有将函数体链接到可执行程序中,而是把一些符号链接起来,在运行的时候再加载对应的函数。
二、库函数的制作
- 首先先了解一下编译的过程:
- 分为 4个 过程
- 预处理 gcc -E hello.c -o hello.i //将宏定义展开、文件包含、删除部分代码等
- 编译 gcc -S hello.i -o hello.s //将C程序翻译成机器的汇编语言
- 汇编 gcc -c hello.s -o hello.o //编译、汇编制定的源文件,但是不进行链接
- 连接 gcc hello.o -o hello //将.o文件链接成一个可执行文件
- 静态库的制作:
- 1、首先将需要制作成库文件的函数编译一下:
- gcc -c add.c (此时会生成对应的add.o文件)
- 2、将生成的add.o文件封装到库文件libmylib.a中
- ar -rcs libmylib.a add.o (ar 指令是专门用于对库来进行操作的)
- 使用静态库来进行编译(链接)程序:
- gcc hello.c -L . -lmylib
- 或者
- gcc hello.c -L . libmylist.a
- 注意:如果不使用-l 指定使用什么库文件,而是直接使用的话,需要将该库文件的路径一并打出来,如果是在当前文件夹下,则不需要。
- 其中 -L 后跟着库文件路径 -l(小写L)为库文件libxxx.a中xxx的名字,若不使用-l则输入库文件全称,如果提示信息缺少头文件则可以加上-I (大写i)头文件路径
- 动态库的制作:
- 1、首先将需要制作成库文件的函数编译一下:
- gcc -c add.c (此时会生成对应的add.o文件)
- 2、将生成的add.o打包生成一个动态库
- gcc -shared -fPIC -o libmylib.so add.o (-shared 共享对象文件,-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码)
- 使用动态库来进行编译(链接)程序
- gcc hello.c -o hello -L . -lmylib
- 或者
- gcc hello.c -L . libmylist.so
三、在使用库函数(链接)编译程序时需要注意的事项
- 在使用动态库的时候,编译好后,如果直接运行程序会报错(原因是查找不到动态库)
- 解决方法:
- 1、直接将自己的动态库 移动到 /lib 或者 /usr/lib 中
- 2、修改环境变量 LD_LIBRARY_PATH :
- 通过修改 家目录下 .bashrc 或者 /etc/profile 来添加动态库路径
- 如: export LD_LIBRARY_PATH=/home/gec/lib:$LD_LIBRARY_PATH
- 然后 source .bashrc (使其立即生效)
- 3、通过修改/etc/ld.so.conf(添加的路径为最优先路径)
- 在ld.so.conf 中 添加 /home/gec/lib
- 保存后执行 ldconfig
相关文章
- linux命令手册
- 你值得了解的 10 个有趣的 Linux 命令行小技巧
- linux多线程随机数,随机数SecureRandom在Linux下阻塞
- Linux 下用 smartd 监测硬盘状况
- linux中__weak关键字的作用
- 【Linux】linux中自动定时备份mysql数据
- Linux小白基础环境搭建汇总
- linux服务器安装nodeJS步骤及踩坑记录(解决node -v报错cannot execute binary file: Exec format error的问题 - 在Linux中安装适用于arm64位的nodejs)以及node环境项目部署
- [linux]查询多个 trace 文件中,包含特定内容的文件
- 【嵌入式Linux驱动开发】十八、Linux内核自带的LED驱动探索
- Linux学习笔记(24)linux发邮件 mailx发邮件
- Linux学习笔记(21)linux查看系统状态
- Linux学习笔记(3)linux服务管理与启停(开机自启与自定义服务)
- linux解压缩tar、zip
- Anatomy of the Linux kernel--转
- 通过命令iostat,iotop查看Linux系统IO性能,信息指标分析详解