动态库与静态库的创建

1.linux下的库的种类
linux下的库有两种:静态库和共享库(动态库)。
二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

2.linux下的库文件如何产生

静态库的后缀是.a,它的产生分两步
Step 1:
由源文件编译生成一堆.o的可执行文件

Step 2:ar命令将很多.o转换成.a,成为静态库
动态库的后缀是.so,它的产生也分为两步

Step1:由源文件编译生成一堆.o的可执行文件

Step2:例如:

 gcc -shared -fPCI -o libmyfunc.so func.o

我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux 中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。

1.编辑待操作的文件 main.c func.f func.c

*******main.c*******

*******func.h*******

*******func.c*******

下面是我们接下来要操作的文件

*******静态库文件的创建*******

2.将func.c生成.o的可执行文件,然后通过:ar cr libmyfunc.a func.o 命令生成.a的静态文件,ls查看当前路径下已生成libmyfunc.a的静态文件。

3.gcc编译生成func 的执行文件,并运行func,得到函数的运行结果

注:我这里的func的功能函数将执行的结果return给main.c 了,所以没有显示结果,该函数与main.c在gcc上联编时显示正确。

4.接下来删掉库文件试试

 

*******动态库文件的创建*******

1.将func.c生成.o的可执行文件,然后通过:gcc -shared  -fPCI -o libmyfunc.sofunc.o 命令生成.so的静态文件,ls查看当前路径下已生成libmyfunc.so的静态文件。

2.在程序中使用动态库

 

哦!出错了。快看看错误提示,原来是找不到动态库文件libmyfunc.so。程序在运行时,会在/usr/lib/lib等目录中查找需要的动态库文件。若找到,则载入动态库,否则将提示类似上述错误而终止程序运行。我们将文件libmyfunc.so复制到目录/usr/lib中,再试试。

3.cp命令将libmyfunc.so复制到/usr/lib目录中

 4.在程序中使用库文件

 以上动态文件运行正常,接下来我们删除/usr/lib目录下的libmyfunc.so文件试试

5.删除/usr/lib目录下的libmyfunc.so文件

怎么样,是不是出现和第3步一样的错误提示,由此可以知道程序的运行需要依赖动态库文件,即每次运行时程序都要到/usr/lib下的目录中去找依赖的动态库文件libmyfunc.so

总结:

1.静态库生成后可删除静态库文件,然后使用程序运行,而动态库文件不能删除,程序运行时需要依赖动态库文件。

2.静态库文件生成的func文件占内存空间较大,动态库文件生成的func文件占内存空间

较小。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值