静态库和动态库的制作和使用

静态库

Linux下的静态库为lib*.a格式的二进制文件(目标文件),对应于Windows下的.lib格式的文件。

1 命名规则

lib+库名字+ .a libMytest.a ,则库名字为Mytest。

2 制作步骤

(1)生成对应的 .o文件 gcc *.c -c ==== *.c --> *.o
(2)将生成的 *.o文件打包 ar rcs + 静态库名称(libMytest.a)+所有 .o文件

3 发布和使用

提供静态库和头文件
使用如下:
测试代码 main.c
则编译过程为:gcc main.c ./libMytest.a -I ./head.h -o myapp
生成可执行程序myapp
或者 gcc main.c -I ./head.h -L ./lib -l Mytest -o myapp -L 静态库目录,-l是静态库名称,掐头去尾(libMytest.a —> Mytest)。

优缺点

Alt

动态库

Linux下的动态库为lib*.so格式的二进制文件(目标文件),对应于Windows下的.dll格式的文件。

1 命名规则

lib+库名字+ .so libMytest.so ,则库名字为Mytest。

2 动态库的制作

1)生成与位置无关的代码(.o
gcc -fPIC -c *.c .c—>.o
2)将.o文件打包成动态库(共享库)
gcc -shared *.o -o libMytest.so (-I ./head.h) 将所有.o文件打包到动态库libMytest.so中

3 发布和使用

提供 .so库和头文件
使用如下:

测试代码 main.c
则编译过程为:gcc main.c ./libMytest.so -I ./head.h -o myapp
生成可执行程序myapp

或者 gcc main.c -I ./head.h -L ./lib -l Mytest -o myapp -L 共享库目录,-l是共享库名称,掐头去尾(libMytest.a —> Mytest)。此处运行myapp出错
解决方法:
首先使用 ldd 命令检查可执行程序关联的共享库 ldd myapp
发现缺少Mytest共享库链接,需要将libMytest.so路径加入到系统环境变量中

1).临时测试
环境变量: LD_LIBRARY_PATH,将动态库的路径设置给该变量
将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH = 路径
当终端关闭, 设置会失效

2).常用的方法(永久设置)

  1. 需要找动态连接器的配置文件 – /etc/ld.so.conf
  2. 动态库的绝对路径写到配置文件中
  3. 更新 ldconfig –v v参数表示显示更新过程的详细信息

优缺点

Alt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值