静态函数设计 ----- 系统调用与库函数的区别

Linux应用程序需要的外部函数主要由函数库和系统调用来提供。

函数库又分为静态函数库和动态函数库,Linux应用程序使用的主要函数库均放于/lib,/usr/lib目录下;Linux下默认使用动态函数库
静态函数库:*.a方式命名的库
动态函数库:*.so.*方式命名的库
RHEL默认不提供静态C函数库(libc.a)。这样的话在链接C的静态链接库或者程序在其他静态链接时用到C库时会出现错误如下图所示



使用静态链接库的缺点,则程序会将所用到的库函数代码在链接时,全部被copy到程序中。---相应的问题:如果多个进程在内存中同时运行,并使用相同的库函数,则造成对空间的浪费。

制作静态函数库
1 . gcc c mylib.c o mylib.o
2. ar cqs libmylib. a mylib.o
3. 将制作好的 libmylib. a 复制到 /usr/lib

使用静态链接库时:gcc -static my_c.c -lmylib -o my_c
注意加重颜色部分:虽然库的名字为libmylib.a,在链接时仅仅使用-l选项加上库的名字即可。



系统调用与库函数的区别

系统调用 :所有的操作系统都提供多种服务的入口点由此程序向内核请求服务。。这些具有良好定义、数量有限、直接进入内核的入口点被称为系统调用----------Linux3.20提供了380个系统调用,,由上知,系统调用是由Linux内核实现的。。
库函数 :这些函数可能会调用一个或者多个内核的系统调用,但是它们不是内核的入口点,,例:printf函数调用write系统调用以输出一个字符串,但有的函数并不使用系统调用

两者之间的区别:

从实现的角度,系统调用与库函数有根本的区别;但从应用的角度,其区别不大
1、系统调用时,内核中的系统调用分配一块空间给进程,而库函数则在用户层次管理这一空间。
2、系统调用通常提供一种最小的接口,而库函数通常提供复杂的功能。例:sbrk系统调用和malloc函数的区别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值