首先我们得知道什么是库呢?它在linux操作系统得哪个位置呢?
(为保证排版整齐,一些不太相关的知识点放在末尾进行补充)
一、什么是库?
1、库是一种加密的二进制文件
2、需要被操作系统载入内存运行
3、相比于可执行文件,它不可以直接运行
4、windows和linux都有自己的库,,但是不兼容
5、linux的库有两种,静态库和动态库
二、在linux操作系统中库存放在哪里呢?
1、库的头文件存放在:/usr/include
2、库存放在:/lib
三、如何识别静态库与动态库?
1、静态库 :*.a
2、动态库:*.so
四、使用时静态库与动态库的区别 ?
1、静态库:
编译: gcc man.c -L路径 -lxxx
-L : 指定库所在的目录
-l : 指定库的名字 (xxx部分)
运行:./a.out
优点:a.out运行时候不需要外部库,运行速度相对较快;发布程序无需提供静态库,移植方便。
缺点:每个a.out都要包含库,体积较大,运行时浪费内存资源;库的更新需要编译项目文件,对程序的更新、部署、发布带来麻烦。
2、动态库:
编译:gcc main.c -L路径 -lxxx
-L : 指定库所在的目录
-l : 指定库的名字 (xxx部分)
运行:通过以下的方法进行配置后,直接运行 ./a.out
法1:将动态库拷贝到 /lib 中(上提到的存放库的位置)
法2:export LD_LIBRARY_PATH = . (不要因为这个点小就忽略哦!!)
或 so 所有的路径,这种方式只对当前终端有效,另外开的其他中断无效。
法3:步骤1:pwd 查出当前路径
步骤2:cd /etc/ld.so.conf.d 跳转路径
步骤3:ls 查看当前路径
步骤4:sudo vi my.cof 使用超级用户权限打开文件
步骤5:添加步骤1得到的路径到文件中
步骤6:sudo ldconfig 使更改的文件生效
优点:动态库编译后体积较小;动态库的改变不影响程序,更新相对比较方便。
缺点:程序运行时必须提供相应的库,缺少相应的库就无法运行程序,发布时必须提供相应的库。
拓展:
1、 i386通常作为对Intel32位处理器得统称。
2、ldd 用于查看可执行程序依赖的动态库有哪些
例如:ldd a.out 查看a.out依赖的以.so结尾的动态库
ldd /bin/ls 查看 ls 依赖的以.so结尾的动态库
3、pwd查看当前路径的绝对路径