Linux库

93 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

1、库是什么

  1. 功能函数整合成一个库,库包含了编译好的代码和数据,方便使用
  2. 程序函数库分为:静态库,动态库,共享库

2、库分类

2.1静态库

  1. 程序执行前,就编译加入到目标程序里了
  2. 用gcc编译,在gcc后用-l来指定这个库函数
  3. 不想让人看到源代码,可以使用静态库

2.2动态库

  1. 程序执行时,由目标程序去调用
  2. 跟window的.dll相似

3、库的优缺点

静态库

优点:

1.运行快

2.发布程序无需提供静态库,因为已经在程序中(app中),移植方便

缺点:

1.程序大

2.更新,部署,发表麻烦。因为要重新编译生成目标程序

动态库

优点:

1.程序小

2.更新升级简单,因为app中没有库源代码,升级库就可以升级app

缺点:

1.运行慢,加载速度慢

2.发布程序需要提供动态库

4、库的制作

4.1静态库

静态库的格式xxx.a

1.生成xxx.o文件 gcc 文件名 -c 例:gcc ser.c -c

2.生成静态库文件 ar rcs lib库名.a xxx.o 例:ar rcs libser.a ser.o ar是指令,rcs是指令参数,可以ar --help查看ar的参数说明

4.2动态库

动态库格式xxx.so

1.生成动态库文件 gcc -shared -fpic 文件名 -o lib库名.so -shared:指定生成动态库 -fpic:fpic选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。 例:gcc -shared -fpic ser.c -o libser.so

5、库的使用

静态库 gcc 编译的文件 -l库名 库查找路径(默认查找/usr/include) 例:gcc server.c -lser -L ./

动态库 编译和静态库一样,gcc server.c -lser -L ./ -o ser 动态库使用

1.查看系统环境变量命令export

2.通常环境变量一个宏:export LD_LIBRARY_PATH="动态库位置pwd命令出来", 指定该程序运行时候,在LD_LIBRARY_PATH所指定的路径去找库文件

注:临时环境变量,这种方法只能在一个终端窗口使用,换一个窗口就不能使用了

可以写一个脚本: 1.vi shart.sh 在这里插入图片描述 2.加一个可执行权限:chmod +x shart.sh 3.直接执行shart.sh 或者直接把库放到 /usr/lib文件夹下,但是不建议这样做