Linux I/O之库

1 库

1.1 定义

库是一个二进制文件,包含的代码可被程序调用。如标准c库、数学库、线程库。

1.2 库的特点

1、库中包含很多函数,程序调用库其实是调用库中的函数;
2、库有源码,可以下载库源码,然后自己编译(也可以修改优化库源码),生成二进制文件库。也可以直接安装库的二进制包;
3、在Linux下,库一般放在/lib或/usr/lib目录下。

1.3 库的分类

静态库和共享库。

2 静态库

2.1 定义

程序源文件编译(链接)时把静态库中相关代码(是需要的代码而不是静态库的全部代码)复制到可执行文件中。

2.2 优点

1、程序中已包含需要的静态库代码,运行时不再需要静态库;
2、程序运行时无需加载库,运行速度快。

2.3 缺点

1、占用更多的磁盘和内存空间;
2、静态库升级后,程序需要重新编译链接。

2.4 静态库的创建步骤

1、设计静态库中函数的功能与接口;
2、编写库源码.c文件,如:hello.c;
3、编译生成目标.o文件,如命令:$ gcc -c hello.c -Wall;
4、创建静态库hello,如命令:$ ar crs libhello.a hello.o;
libhello.a为生成的静态库文件。其命名规则为:必须是lib开头,.a后缀结尾。注意: libhello.a叫库文件名,hello叫库名,编译时要指定库名,而不是库文件名。
5、查看库中符号信息(即函数),如命令:$ 你们里边hello.a。

2.5 静态库中的文件介绍

1、库源码,如hello.c;
2、库目标文件,如hello.o;
3、库文件名,如libhello.a;
4、库名:hello。注意:没有具体的文件对应库名,它是虚拟的;也可以这样说,hello.c、hello.o和libhello.a构成了hello。

3 共享库

3.1 定义

程序源文件编译(链接)时仅记录用到那个共享库中的那个符号(函数),不复制共享库中相关代码。

3.2 优点

1、程序中不包含库中代码,程序尺寸小;
2、多个程序可以共享同一个库;
3、库升级方便,无需重新编译程序;
4、较静态库,共享库使用更加广泛。

3.3 缺点

程序运行时需要加载库。

3.4 共享库的创建步骤

1、设计共享库中函数的功能与接口;
2、编写库源码.c文件,如:hello.c,bye.c;
3、编译生成目标.o文件,如命令:$ gcc -c-fPIC hello.c bye.c -Wall;其中 -fPIC 的意思是生成与位置无关的代码;
4、创建共享库common,如命令:$ gcc -shared -o libcommon.so.1 hello.o bye.o;
libcommon.so.1 为生成的共享库文件。其命名规则为:必须是lib开头,common是库名,.so是共享库后缀,.1是共享库版本号。注意: libcommon.so.1 是共享库文件,共享库库名是common。
5、为共享库文件libcommon.so.1 创建链接文件libcommon.so,其命令是:$ In -s libcommon.so.1 libcommon.so。符号链接文件命名规则:lib<库名>.so。

3.5 让系统找到要加载的共享库的三种方式

1、把库拷贝到/usr/lib和/lib目录下;
2、在LD_LIBRARY_PATH环境变量中添加库所在路径(缺点:每打开一个Linux终端shell都要添加一次);
3、添加/etc/ld.so.conf.d/*.conf文件,执行ldconfig刷新。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值