对于动态库静态库的一些笔记

1.先说库的概念:
库是一个二进制文件,包含的代码可被程序调用。
我们所用的stdio.h,math.h,以及多线程的头文件里包含的函数都是有一个库与之对应的。
在Linux系统中,这些库包含在/lib 或者 /usr/lib目录下。
2.Windows和Linux下的库不兼容,Linux下的库分为两种:静态库(static)和动态库(共享库shared)。
OS下写代码都用到库,会提高开发效率。
3.静态库特点:
编译(链接)时把静态库中相关代码复制到可执行文件中
• 程序中已包含代码,运行时不再需要静态库
• 程序运行时无需加载库,运行速度更快
• 占用更多磁盘和内存空间
• 静态库升级后,程序需要重新编译链接
4.静态库的创建:
①确定库中函数的功能、接口
②编写库的源码
③编译生成目标文件(filename.o) $ gcc -c hello.c -Wall
④创建静态库 ar crs libhello.a hello.o
⑤链接静态库 gcc -o test test.c -L. libhello.a
(可以用nm <静态库文件名>)
5.共享库的特点
编译(链接)时仅记录用到哪个共享库中的哪个符号,不 复制共享库中相关代码
• 程序不包含库中代码,尺寸小
• 多个程序可共享同一个库
• 程序运行时需要加载库
• 库升级方便,无需重新编译程序
• 使用更加广泛
6.共享库的创建
①确定库中函数的功能、接口
②编写库的源码
③编译生成目标文件(filename.o) $ gcc -c -fPIC hello.c -Wall(fPIC是共享编译参数)
④创建动态库 gcc -shared -o libcommon.so.1 hello.o bye.o
⑤由于我们创建的动态库不在系统库的文件路径下,所以需要配置环境参数:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.(这里的:是增加一个路径,.是当前路径的意思)
为了让系统能找到要加载的共享库,还有有三种方法 :
Ø 把库拷贝到/usr/lib和/lib目录下
Ø 在LD_LIBRARY_PATH环境变量中添加库所在路径

Ø 添加/etc/ld.so.conf.d/*.conf文件,执行ldconfig刷新
⑥链接动态库 gcc -o test test.c -L. libhello.a

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值