C中的动态库与静态库

一、介绍

1、静态库

静态链接库实现链接操作的方式很简单,即程序文件中哪里用到了库文件中的功能模块,GCC 编译器就会将该模板代码直接复制到程序文件的适当位置,最终生成可执行文件。

使用静态链接库生成的文件通常体积较大,但运行时不再依赖库文件,可以拷贝到别的设备上运行。

在Linux中静态链接库文件的后缀名通常用.a表示;在Windows系统中,静态链接库文件的后缀名为.lib。

2、动态库

动态链接库,又称为共享链接库。和静态链接库不同,采用动态链接库实现链接操作时,程序文件中哪里需要库文件的功能模块,GCC 编译器不会直接将该功能模块的代码拷贝到文件中,而是将功能模块的位置信息记录到文件中,直接生成可执行文件。

使用动态链接库生成的文件通常体积较小,但运行时依赖库文件

在Linux中,动态链接库的后缀名通常用.so 表示;在Windows系统中,动态链接库的后缀名为.dll。

二、操作

1、使用静态库

通常情况下GCC在编译过程中默认使用动态链接库,我们可以使用 -static 选项指定使用静态链接库。

2、生成库

静态链接库和动态链接库我们也可以自己制作,只要是不包含 main 函数的文件都可以打包成库文件。可以一个文件打包成一个库文件也可以将多个文件打包成一个库文件。

需要注意,库名格式为:libxxx.a 和 libxxx.so

ar rcs 静态链接库名称 目标文件1 目标文件2 ...
gcc -fpic -shared 源文件名... -o 动态链接库名(出错,可以将 -fpic 换位 -fPIC)

3、使用动态库

在Linux 中,动态库的搜索路径除了默认的搜索路径外(/lib 或者 /usr/lib),还可通过三种方法来指定:

方法一:在配置文件 /etc/ld.so.conf 中指定动态库搜索路径;

ld.so.conf 文件中的内容为 :include ld.so.conf.d/*.conf

所以可以在 ld.so.conf.d 文件夹下创建我们自己的配置文件,并将需要搜索的动态库路径添加进去。

添加完后需要使用 ldconfig 刷新缓存。

方法二:通过环境变量 LD_LIBRARY_PATH 指定动态库搜索路径(临时的,只在当前shell下生效);

SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
# 添加依赖搜索路径
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${SHELL_FOLDER}/lib/log/linux_x64

方法三:在编译目标代码时指定该程序的动态库搜索路径。

g++ -Wl,-rpath=/usr/local/lib/ -oevh libevent_http.cpp -levent

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

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

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

打赏作者

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

抵扣说明:

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

余额充值