Linux学习记录——静态库与共享库的区别

文章介绍了如何制作和使用静态库(.a)和共享库(.so),包括编译命令和运行步骤。静态库在运行时不需要额外库文件,但生成的程序体积大;共享库则使程序体积小,利于更新和部署,但运行时需要库文件。文章还讨论了各自的优缺点,如资源利用和更新便捷性。
摘要由CSDN通过智能技术生成

静态库 (.a)

静态库的制作和使用

制作:

  1. gcc -c test.c -o test.o
  2. ar -crs libtest.a test.o
    注:静态库取名必须lib开头,紧跟库的名字,最后跟拓展名.a

使用:

  1. gcc -c mian.c -L 路径 -l库名
  2. -L:指定库的路径
  3. -l: 库名(不包括lib)

运行:

  1. ./a.out

静态库的优缺点

优点:

  1. 运行时不需要库,可以直接运行

缺点:

  1. a.out包含库文件,体积大,浪费资源
  2. 给程序的更新,部署,发布带来麻烦

共享库(动态库)(.so)

共享库的制作和使用

制作:

  1. gcc -fpIC -c test.c -o test.o
  2. gcc -shared -o libtest.so test.o
    注:共享库命名必须lib开头,紧跟库名,以.so结尾

使用:

  1. gcc -L 路径 -l库名 (库名不包括lib)
  2. ldd 可执行程序名 ——用于查看可执行程序所依赖的共享库有哪些

运行:

  1. ./a.out !!直接运行会报错(须先添加共享库搜索方法)

共享库搜索方法(3选一):

  1. 将共享库拷贝到 /lib/ 或者 /usr/lib/
    $ sudo cp libtest.so /usr/lib/
  2. export LD_LIBRARY_PATH=. (或者libtest.so所在的路径) (临时情况)
    1. pwd 并复制路径
    2. cd /etc/ld.so.conf.d
    3. ls
    4. sudo vi my.conf
    5. 添加路径
    6. sudo ldconfig 生效

特点:在编译时不会链接到可执行文件中,只是再其中保存一个索引,在运行时,才真正的链接(动态),因此可执行程序体积小。

共享库的优缺点

优点:

  1. 可执行程序体积较小, 节约资源;
  2. 只需要修改.so动态库,有利于程序的更新,部署,发布;

缺点:

  1. 可执行程序运行时需要库,不能直接运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值