静态库和动态库的编写与使用

一、动态链接库

1、概念

描述:链接时不会把代码编译到二进制文件中,而是在运行时才去加载,所以只需要维护一个地址。

动态:运行时需要时才加载,动态加载。

链接:库文件和.o目标文件分离,用特殊的手段维护两者关系。

库:库文件。

2、文件后缀格式

Windows 下 libxxx.dll

Linux 下 libxxx.so

3、命名方式:

xxx.cpp -> libxxx.so
前面必须是 lib 开头, 必须这样命名,否则无法使用.

4、生成和使用动态库

生成和链接动态库时经常用到的gcc选项
在这里插入图片描述

生成动态库
g++ -shared -fPIC func1.cpp -o libfunc1.so

接入动态库
g++ -L./ -lfunc1 main.cpp -o main

运行程序, ./main 此时运行程序会报错: 找不到库
解决办法:
ldd 程序名查看缺少哪个库

解决方法1: 把缺少的库放到系统共享库文件夹usr/lib 或 usr/local/lib

解决方法2: 引入库的路径(临时引用, 此方法只对本次shell有效)
export LD_LIBRARY_PATH=缺失库的路径

运行程序
./main 运行成功

二、静态库

1、概念

基本概念:会把库中的代码编译到二进制文件中,当程序编译完成后,库文件可以删除。

2、文件后缀格式

Windows 下 libxxx.lib

Linux 下 libxxx.a

3、命名方式:

xxx.cpp -> libxxx.a
前面必须是 lib 开头, 必须这样命名,否则无法使用.

4、生成和使用静态库

正常编译生成可重定向的目标文件 xxx.o
g++ -c xxx.cpp -o xxx.o

使用 ar 工具打包为静态库
ar -rc xxx.o -o libxxx.a

ar 工具常用选项
在这里插入图片描述

编译时链接静态库
g++ -L./ -lxxx main.cpp -o main

运行程序
./main 运行成功

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李吱恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值