Linux库相关

一.先引入分文件编程思想

1.1描述

  • 以main()函数作为函数的入口,main函数中包含一些功能func函数, 把这些函数单独分成若干个功能模块。

1.2分模块的好处:

  1. 功能划分清楚
  2. 方便调用和后期修改
  3. 主程序简洁

1.3怎么分模块?

  1. 将源程序分为main函数入口和多个功能模块的.c文件
  2. 将包含main函数的.c文件中的功能模块定义实现部分去掉,只留下函数引用
  3. 在包含main函数的.c文件中添加功能模块的头文件,注意用“”号,“”表示程序运行时,会先到当前文件去找 头文件(.h文件),如果找不到,就会到/usr/include/和/usr/local/include下去找,再找不到就报错。
  4. 头文件中就是关于功能模块的声明部分(原型)
  5. 编译的时候,用gcc + mian.c +func.c +…联合编译生成可执行程序,其实就是将main函数和功能模块联系起来,主程序中包含了func的头文件,就会调用到fun.c

1.4为什么用库?

  • 很多时候我们希望程序可以运行,同时又不希望用户看到我们的源码,就需要用到库相关概念

二.动态库和静态库相关概念

2.1库的分类

  • 静态函数库(static libraries)
  • 动态加载函数库(dynamically loaded libraries)
  • 共享函数库(shared libraries),和动态加载函数库是一个东西,在Linux上叫共享对象库,后缀是.so,在windows上叫做动态加载函数库,后缀是.dll
  • Linux系统中共享库的命名规则:
    lib+name+.so+.x +.y +.z
    分别表示:共享库,名称,固定后缀,主版本号,次版本号,发行版本号

2.1动态库和静态库的区别

  • 静态库,在程序执行前(编译阶段),加入到目标程序中去
    特点:运行快,但占空间大,且更新部署,都需要重新联合编译,比较麻烦

  • 动态库,程序执行时,临时由目标程序去调用,多个进程可以共用
    特点:运行较慢,但占空间小,每次更新只需要提供新的动态库,容易加载

三.静态库的制作和使用

3.1静态库制作

  1. gcc name.c -c 生成name.o文件
  2. ar rcs libname.a name.o 生成name.a文件(ar指令,rcs参数,libname.a要生成的文件,name.o要用到的材料.o文件)

3.2静态库的使用

  1. 提供main.c name.h 以及 libname.a
  2. 调用:gcc mian.c -lname -o mianpro链接到动态库,注意,-l 会默认到/usr/lib下面去找
    或者 gcc main.c -lname -L ./ -o mainpro 指定到当前目录下去找

四.动态库的制作和使用

4.1动态库的制作

  1. gcc -shared -fpic name…c -o libname.so 直接生成.so文件
  2. -shared 表示指定生成动态库
  3. -fpic 表示生成位置无关码

4.2动态库的使用

  1. 提供main.c name.h 以及 libname.a
  2. 调用:gcc mian.c -lname -o mianpro链接到动态库,注意,-l 会默认到/usr/lib下面去找
    或者 gcc main.c -lname -L ./ -o mainpro 指定到当前目录下去找
  3. 动态库和静态库的使用基本一样,但是动态库编译生成的可执行程序,执行时需要库文件的支持,我们可以把.so文件也放到/usr/lib/目录下,在编译

4.3 Linux动态库,指定动态库目录的方法

  • 详细文章链接

  • 方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。

vi /etc/ld.so.conf
  • 方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。但是每次都要配置,可以写一个shell脚本
export LD_LIBRARY_PATH=”你想要的目录”
  • 方法三:在编译目标代码时指定该程序的动态库搜索路径
    通过gcc 的参数”-Wl,-rpath,”指定,如:
gcc  main.c   -lname     -L./ -Wl,-rpath=./ -o  mainpro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

elaot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值