Linux05库,静态库,共享库

1.库

1.1定义

库是预先编译好的方法【函数】的集合。
例如:list.h 声明 list.c 实现
linux 上库的命名一般为 libxxx.a(静态库)或 libxxx.so(共享库)
库文件常存放的地点为/lib 或者 /usr/lib(用户安装的),
库对应的头文件一般放在/usr/include 中 。例如:stdio.h
命令存放位置:/usr/bin /bin

1.2库的使用

库的使用: 假设在 main.c 中用到了这两个方法
示例 :gcc -o main main.c -lfoo
其中-l 指定的是库名,注意没有库的前缀和后缀 -L 指定路径,该示例没有用到

2.静态库

2.1 静态库的生成

静态库(libxxx.a格式)的生成,共有两个方法 :int add(int x, int y),int max(int x, int y) 分别在两个文件 add.c 和 max.c 中。
则静态库生成过程如下:
(1) 将所有.c 源文件处理成.o 目标文件
gcc -c add.c 生成 add.o
gcc -c max.c 生成 max.o
(2) 对生成的.o 目标文件打包生成静态库 ,假设静态库的名字为 libfoo.a
ar crv libfoo.a add.o max.o
其中 ar 是做库的命令,c 是创建库,r 是将方法添加到库里 v 显示过程(可以不要 )

3.共享库

3.1生成及使用

(1) 第一步将所有的源文件处理成.o 目标文件
gcc -c add.c 编译生成 add.o
gcc -c max.c 编译生成 max.o
(2) 对生成的.o 文件处理生成共享库,( gcc -shared -fPIC)假设共享库的名字为 libfoo.so
gcc -shared -fPIC -o libfoo.so add.o max.o (若没有.o给.c也可以)

3.2查看共享库

ldd 可执行文件名

3.3使用库(静态,共享)

gcc -o 程序名字+程序名字.c L+库的路径 l+库的名字(标准库不需要)

4.两者的区别(静态库和动态库)

静态库:链接时用到的方法从库中拷贝到可执行的地方,
优点:运行时不依赖库。
缺点:想升级库要重新编译,占内存空间大。

动态库:运行时找共享库
优点:体积小,更新时更换库就可以,不需要重新编译。
缺点:装载速度慢

4.1练习

库的定义,共享库的存放位置(4G的) ,建库的命令,区别,查看程序的共享库ldd
修改LD_LIBRARY_PATH=.
export LD_LIBRARY_PATH,
echo $LD_LIBRARY_PATH
优先链接本目录下的共享库测试升级后的库,不用编译

猜你喜欢

转载自blog.csdn.net/sunshinecandy/article/details/86291087