Linux静态库与动态库的生成和使用

静态库与动态库的生成和使用

库文件实际上就是封装了一大堆已经编译完成的代码文件,通过链接这个库进而获取到相应函数实现。

动态库的生成

动态库的打包:
gcc -c -fPIC child.c -o child.o
gcc -shared child.o -o libmychild.so

动态库生成的链接器:gcc

  • -fPIC:生成目标代码时产生位置无关代码,动态库会在虚拟地址空间的共享区中加载一份
  • -share:要生成的是动态库而不是可执行程序

动态库的命名:
lib 是前缀    .so是后缀    中间是库名称
在这里插入图片描述

静态库的生成

静态库的打包:
gcc -c child.c -o child.o
ar -cr libmychild.a child.o

静态库生成的链接器:ar

  • -c:创建静态库
  • -r:模块替换

静态库的命名:
lib 是前缀    .a 是后缀    中间是库名称
在这里插入图片描述

库的使用

查看可执行程序(main)依赖的动态库
ldd main

生成可执行程序时链接使用:gcc main.c -o main -lmychild(-l 指定库名称)

  • 必须将库文件放到指定路径下:/usr/lib64
  • 设置链接库的搜索路径环境变量,将当前库文件所在路径添加进去:export LIBRARY_PATH = $LIBRARY_PATH:.
  • 使用gcc -L选项指定链接库的搜索路径:gcc main.c -o main -L./ -lmychild

运行可执行程序时加载使用:仅仅针对动态库才会在运行时加载库文件

  • 必须将库文件放到指定路径下:/usr/lib64
  • 设置链接库的搜索路径环境变量,将当前库文件所在路径添加进去:export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:.

在这里插入图片描述

如果链接的时候链接的是动态库,程序运行时就需要加载动态库。
如果链接的时候链接的是静态库,程序运行时就不需要加载库文件。

实际工作中使用第三方库,我们通常用 -L 来指定第三方库所在的路径,链接的是静态库。
在这里插入图片描述

测试代码https://github.com/achen228/Linux/tree/master/base_io/lib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值