库的制作:
1、什么是库
静态
库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中, 连接器 将从库文件取得所需的 代码 ,复制到生成的 可执行文件 中的这种
库。
/lib/i386-linux-gnu
/usr/include
1.库是一种加密的二进制文件
2.需要被操作系统载入内存运行
3.相比于可执行程序,它不可以直接运行
4. window和linux都有自己的库,但是不兼容
5.Linux系统的库有两种:1.静态库2.共享库(又叫动态库)
静态库 动态库
linux *.a *.so
windows *.lib *.dll
2、静态库的制作和使用
1.制作
$ gcc -c xXx.C -O XXX.O
$ ar -crs libxxx.a XXX.O
静态库的命名规范:
必须以lib开头,紧跟库的名字,跟扩展名.a
例如: libxxx.a
2.使用
将生成的libMytest.a库文件和头文件head.h发送给客服,客服就可以根据头文件中的
接口情况,来知道库文件的功能 (具体怎么实现的他也不知道),从而客服就可以使用库文件来完成自己的工作了(main.c):
$ gcc main.c -L路径 -lxxx
-L:指定静态库所在的目录
-l:指定静态库的名字 xxx部分
3.运行
$ ./a.out (7200)
优点:a.out运行后不需要库,可以直接运行
缺点:
每个a.out都要包含库,体积较大,浪费资源
对程序更新,部署,发布带来麻烦;
3、动态库的制作和使用
1). 动态库也叫共享库
2). 动态库把对一些库函数的链接载入推迟到程序运行的时期(runtime)
3). 可以实现进程之间的资源共享
4). 将一些程序升级变得简单
5). 甚至可以真正做到链接载入完全由程序员在程序代码中控制
6). 动态链接库的名字形式为 “libxxx.so” 后缀名为 “.so”
7). windows共享库是以 .dll 为后缀的文件
1.制作
$ gcc -fPIC -c xxx.c -o xxx.o
$ gcc -shared -o libxxx.so xxx.O
动态库的命名规范:
必须以lib开头,紧跟库的名字,跟扩展名.so
例如: libxxx.So
2.使用
$ gcc main.c-L路径-l××x
$ ldd a.out# 用于查看可执行程序依赖的动态库有哪些
3.运行
$ ./a.out#会报错(7146)
动态库的搜索方式(3种,任意选一种):
1、将动态库拷贝到/lib/或者/usr/lib/
$ sudo cp libxxx.so /usr/lib/
2、export LD_LIBRARY_PATH=.或者so所在的路径(临时情况)
3、
pwd
cd /etc/ld.so.conf.d
ls
sudo vi my.conf
添加路径
sudo ldconfig 生效
特点:
在编译时不会链接到可执行文件中,只是再其中保存一个索引,在运行时,才真正的链接(动态),因此可执行程序体积小。
优点:
a.out体积较小,节约资源;