Linux 下静态库与动态库的制作与使用

Linux 下静态库与动态库的制作与使用


示例代码:
  • test.c
    在这里插入图片描述

  • test.h
    在这里插入图片描述

  • main.c
    在这里插入图片描述

静态库
静态库制作
  • 以示例代码为例,先执行下面命令,生成 .o 文件
gcc -o test.o -c test.c
  • 通过ar命令创建静态库
/*静态库必须以 lib 为前缀,文件拓展名为 .a*/
ar -rsv libtest.a test.o
静态库使用
  • 使用静态库时,如示例代码main.c所示,包含头文件,下面以编译时.a文件在当前目录为例
/*
-L 表示添加库的搜索路径,. 代表当前目录
-l 注意是小写的L,代表库的名称
静态库的真正名称 = libhello.a 去掉前缀 lib 和 后缀 .a 
*/
gcc main.c -o main -L. -ltest
  • 最后执行
    在这里插入图片描述
动态库
动态库制作
  • 以示例代码为例,先执行下面命令,生成 .o 文件
/*如果 test.c 用到了其他 .c文件,比如add.c、sub.c,相关文件也需要生成目标文件。*/
gcc -fPIC -o test.o -c test.c

这里新增了 -fPIC 选项,实际上改变的是 hello.o 的符号表,我们可以使用 nm 命令查看hello.o的符号表,多出了一个全局偏移表,没有这个偏移表是无法动态编译的。
在这里插入图片描述

  • 使用下面命令,生成动态库
/*gcc -shared -o libxxx.so xxx.o xxx.o ... */
gcc -shared -o libtest.so test.o
动态库使用
  • 修改环境变量 LD_LIBRARY_PATH,将当前目录增加到环境变量中
export LD_LIBRARY_PATH=./
  • 只是在当前 Shell 环境下有效,如果新开一个终端,相当于创建了一个新的Shell环境,该环境下的环境变量LD_LIBRARY_PATH是空的。
  • 环境变量 LD_LIBRARY_PATH是动态库的搜索路径,一般情况下为空,可执行文件运行时,会去这个环境变量中搜索动态库路径
  • 使用下面命令编译main.c文件
/*与静态库使用时的编译命令一致*/
gcc main.c -o main -L. -ltest

ldd 命令可以查看当前执行文件所链接的动态库
在这里插入图片描述

  • 最后执行
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值