linux动态库是静态库的设计

        无论是在 windows 还是 linux 下都存在着库,库是二进制文件,里面有一些函数,它可以看成函数的集合,可以方便程序员调用,程序员只需要 include 它的头文件即可调用函数。
使用库的好处:
        ①可以减少开发者的代码开发量,缩短开发周期。
        ②提高代码的重用性。
库如何进行使用:
        需要两个文件,一个是头文件,一个是库文件。
①头文件——包含了库函数的声明
②库文件——包含了库函数代码的具体实现细节
注:库并不能单独使用,只有通过其他程序调用才能执行。
那接下来我们来谈谈怎么创建动态库和静态库:

静态库的创建

        静态库可以认为是一些函数的集合,它是在程序运行前就加载到程序里面了,成为程序执行的一部分。
静态库一般的格式为 lib + “ 名字 ” + .a 后缀为 .a
例如:libtest1.a
下面进行静态库的制作
第一步:将编写好的.c 文件的代码生成对应的.o 文件
gcc -c xx.c -o xx.o //可链接文件,包含了这个.c 文件本身所有的二进制指令
第二步:将生成好的.o 文件通过 ar 打包工具打包成.a 文件
ar -rcs lib 库的名字.a o 文件列表 // 例如: ar -rcs libxx.a a.o b.o c.o
其中 rcs 参数的意思如下:
        ①r 更新
        ②c 创建
        ③s 建立索引
步骤二结束后就会出现 libtest.a 这么一个库文件

静态库的优缺点

优点:
        静态库是直接加载到应用程序里面的,所以方便程序进行寻找。程序在运行的时候和库函数没有任何关系了,因为库函数的已经加载到应用程序里面了,所以移植到其他地方就很方便,不用管库函数,所以删除库函数程序照样能运行。
缺点:
        消耗系统资源比较大,每个使用静态库的都要复制一份,浪费内存。如下图所示。

        每一个程序都需要加载一份静态库,如果有很多很多程序,那么每一个都需要加载一份静态库 的话就会很消耗资源。
        还有一点就是更新不太方便,如果这个应用程序,比如一个游戏需要更新,那么我就需要重新下载一下,因为静态库的是直接加载到应用程序里面的,就需要重新编译。这样可能是一个很小的操作,都会导致重新下载或编译。

动态库的创建 

        在 linux 里动态库也可以叫作共享库。动态库和静态库不一样,它只有在程序运行时才被载入的。并且几个程序都调用它的话,只要在内存中有一份就行,避免了静态库的浪费资源的问题。同时它也避免了静态库更新的问题,用户只需要更新动态库即可。
动态库一般格式: lib + “名字” + .so
例如:libtest.so
下面是动态库的创建过程:
        生成目标.so 文件,要加编译选项-fpic(pic,position independent code),目的是为了能够在多个应用程序间共享。然后生成共享库,此时要加链接器选项:-shared
gcc -shared -fpic -o libxxx.so xxx1.c xxx2.c …

动态库的优缺点

①优点:
        方便更新,也不会占用太多资源
②缺点:
        移植性差,因为你动态库不是加载到应用程序内部的,所以移植的时候得带上,并且加载是外部加载,所以会比较慢。

库的使用方法

        在编辑好库之后,在引用库编译生成可执行文件时,要使用参数包含库文件名和库文件位置和头文件位置
        1.用(-I 路径/文件)指定头文件位置( -I 后面不需要空格,以下都是)
         2.用(-l 动态库名)指定编译的库函数(如调用数学函数要加-lm)
        3.用(-L 路径/文件)指定库文件存放位置
例如:
gcc main.c -o mian -I./hfile -la -L./sofile
        但是注意在使用动态库之前,需要对环境变量进行修改,因为动态库并不是像静态库一样在编译阶段就被加载到程序中,所以要配置环境变量加载动态库,具体操作是:在 linux 中有一个环境变量 LD_LIBRARY_PATH, 表示加载库的路径
        使用 export 环境变量=$环境变量:你要添加的路径(库文件存放位置) 就可以加载动态库文件 到程序,当然可以写入到/etc/profile 或家目录的.bashrc 或/etc/environment 中使其不局限于本次终端有效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九月丫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值