Linux网络编程-静态库和动态库

文章介绍了Linux系统中如何制作和使用静态库(libxxx.a)与动态库(.so文件),包括编译源文件生成.o文件,使用ar或gcc命令创建库,以及在项目中链接这些库。动态库在内存中运行,适合多程序共享,而静态库会打包到可执行文件中。使用动态库需要设置LD_LIBRARY_PATH环境变量或修改系统配置。
摘要由CSDN通过智能技术生成

一.静态库

静态库格式为libxxx.a,中间是库名称,它的制作需要两步:

将c源文件编译为二进制.o文件, gcc -c test.c 生成test.o
将test.o文件生成libtest.a文件, ar rcs libtest.a test.o

主要第二步容易忘,需要经常记忆

二.静态库使用

假设你的项目目录如下,你要编译main.c:

gcc main.c -o main -I ./include -l calc -L ./lib

其中的参数在上篇gcc 编译可选项中讲过,-o是生成自己想要的名字,-I(大i)是找到自己的头文件目录,因为静态库制作并不包含头文件信息,-l(小L)加的是自己刚制作的静态库名称,-L是自己静态库的目录,便于找到该库。

其实这几个参数和它目录是一致的,便于记忆。

三. 动态库制作

静态库是在链接阶段打包到可执行文件中的,加载速度快,而动态库是独立于可执行文件的,它运行在ram随机存储内存中。

开多个相同程序时肯定动态库方便,因为它是共享的。

静态库部署更新发布麻烦

库较小使用静态,库较大使用动态

动态库制作也要两步

第一步生成二进制.o文件, gcc -c -fpic test.c

-fpic参数在上篇有记录,它将生成与位置无关的代码

第二步生成动态库.so文件 gcc -shared test.o -o libtest.so

其中第二步和静态库ar指令制作不同,动态库依然使用gcc编译

四.动态库使用

动态库使用和静态库一致,也需要头文件目录,库文件名称及目录。

但是动态库在链接时只有简要信息,生成的可执行文件并不包含动态库代码,所以需要加入到环境变量中,供系统调用。

  1. 加入到终端窗口LD_LIBRARY_PATH中(临时添加,关掉窗口即消失)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ikun/course01/lib

使用echo $LD_LIBRARY_PATH查看是否添加成功

  1. 用户级别,添加到用户.bashrc文件中

cd

切换到用户目录下即/home/ikun

ll或者ls -a

列出当前所有文件,包括隐藏的配置文件.bashrc

gedit .bashrc

打开.bashrc 文件,当然你也可以用vim

在最后一行添加

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ikun/course01/lib

保存退出

source .bashrc使配置生效
  1. 系统级别(root权限)

在/etc/profile 文件中,和第二种方式一致

  1. 修改/etc/ld.so.cache

我们要修改/etc/ld.so.conf文件,直接加入库文件路径即可

sudo ldconfig更新即可
  1. 不建议将库文件放置在/lib或者/usr/lib中,因为里面有一些系统的库文件

总结:用户级别就用2,系统级别就用3或4

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值