Linux----静态函数库和动态函数库制作


前言

本文讲解了静态函数库和动态函数库的制作,并且讲解了他们如何整合进可执行程序中的,并且讲解了他们的区别


一、LInux系统下的函数库

静态库:

libxxx.a  在编译时就将库编译进可执行程序中
优点:程序的运行环境中不需要外部的函数库
缺点:可执行程序大

动态库:

又称共享库,libxxx.so,在运行时将库加载到可执行程序中
优点:可执行程序小
缺点:程序的运行环境中必须提供相应的库

其中linux系统下,函数库的目录有:/lib /usr/lib
具体可以进入相应的目录查看

二、静态函数库

1.函数库的制作

代码如下(示例):
生成目标文件:

	gcc -c file.c -o file.o   (其中file是文件名)
静态函数库创建命令ar
		ar  -cr  libfile.a  file.o
-c:创建的意思
-r:替换的意思,表示当插入的模块file.o已经存在libfile.a中,则覆盖掉,若没有覆盖,则ar显示一个错误信息。

2.操作静态库的实例

(1)如果从别处得到一个静态库libunknown.a,想知道其中包含哪些模块,可以使用如下命令:

	ar  -t  libunknown.a

(2)静态库的编译:

	gcc  -o  main  main.c  -L.  -lfile
这条命令在编译main.c就会把静态库整合进main

其中:

-L指定静态函数库的位置供查找,注意-L后面还有“.”,表示静态函数库在本目录下查找。

-l则指定了静态函数库的名字,由于静态函数库的命名方式是“libxxx.a”,其中“lib”和“.a”可以忽略,因此上述命令-l后面实际上是“libfile.a”这个静态函数库。

注意:删除libfile.a后main仍然可以运行,因为静态库的内容已经整合进去了。

三、动态函数库

1.函数库的制作

生成目标文件:

	gcc  -c  file.c  -o  file.o

生成libaddsub.so动态函数库

	gcc  -shared  -fpic  -o  libfile.so  file.o
	-fpic:产生位置无关代码
	-shared:生成共享库

2.操作静态库的实例

将动态库整合入可执行文件:

	gcc  -o  out  main.c  -L.  -lfile

此时还不能立即./out,因为在动态函数库使用时,会查找/usr/lib或者/lib目录下面的动态函数库,而此时我们生成的库不在里边,有如下解决方法

方法一:

	Libfile.so放到/usr/lib或者/lib中去

方法二:

	假设libfile.so在/home/linux/file目录下,输入如下命令
		Export LD_LIBRARY_PATH=/home/linux/file: $LD_LIBRARY_PATH

方法三:

在/etc/ld.so.conf文件里加入我们生成的库所在的目录

然后使用命令:

		/sbin/ldconfig  /etc/ld.so.conf

来更新我们的修改

注意:

/etc/ld.so.conf是非常重要的一个目录,里面存放的是链接器和加载器搜索共享库时要检查的目录,默认是从/usr/lib或者/lib中读取的,所以想要顺利运行,可以把我们库的目录加入到这个文件中并执行/sbin/ldconfig命令来更新修改。

总结

文章讲解了静态和动态函数库的简单制作,希望帮助到大家

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SigmaBull

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

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

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

打赏作者

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

抵扣说明:

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

余额充值