Linux中库的分类与作用及制作

一、库函数

  • 什么是库函数:库在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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的猫丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值