静态链接库设计

Linux应用设计中使用的外部函数主要来源于函数库调用和系统调用。系统调用由Linux内核实现,即函数的实现代码包含在内核里,如open函数;函数库位于内核之外,是语言或应用程序的一部分,如c库,程序员自己开发的函数库。

函数库按照链接方式可以分为静态链接库和动态链接库。
Linux应用程序使用的主要函数库均存放于 /lib, /usr/lib目录下,其中采用*.so.*方式 命名的是动态函数库,而以*.a方式命令的是 静态函数库。
使用静态链接库时,程序所要使用的库函数的代码在链接时全部被拷贝到程序中。如果有多个程序在内存中运行,并且使用了相同的库函数,那么在内存中就会有多份拷贝,造成空间的浪费。
Linux编译时默认是链接动态库,如果要使用静态库则需要使用编译选项-static,如:
gcc -static test.c -o test

制作静态链接库的步骤为:
①gcc -c mylib.c -o mylib.o      #只编译,不链接
②ar cqs libmylib.a mylib.o      #打包生成函数库
③cp libmylib.a /usr/lib/libmylib.a    #将制作好的libmylib.a复制到/usr/lib
如下面的tax.c实现计算个人所得税:
/****************************************************
 * 文件名:tax.c
 * 程序说明:计算个人所得税
 * 公式:个人所得税=(收入-三险一金-个税免征额3500)*适用税率-速算扣除数
****************************************************/

int tax(int salary,int insurance)
{
    int my_salary=salary-insurance;
    int tmp=my_salary-3500;
    if(tmp<=0)
        return 0;
    if(tmp<=1500)
        return tmp*0.03;
    if(tmp<=4500)
        return tmp*0.1-105;
    if(tmp<=9000)
	return tmp*0.2-555;
    if(tmp<=35000)
	return tmp*0.25-1005;
    if(tmp<=55000)
	return tmp*0.3-2755;
    if(tmp<=80000)
	return tmp*0.35-5505;
    if(tmp>80000)
	return tmp*0.45-13505;
}
以下为一个使用tax函数库的test.c:
#include<stdio.h>
#include"tax.h"
void main()
{
    int my_salary=8000;
    int my_insurance=1200;
    int my_tax=tax(my_salary,my_insurance);
    printf("the tax is %d\n",my_tax);
}
这里的tax.h需要自己创建,里面内容为声明函数 int tax(int salary,int insurance)。
编译:gcc -static test.c -ltax -o test
说明:GCC在链接时,默认只会链接C函数库,而对于其他函数库,则需要使用-l选项来显示地指明需要链接,形式为-lname.函数库默认以lib开头,程序员制作自己的函数库时也应该遵循这一规则,如libmylib.a,libmylib.so,而用-l选项指明函数库不写上lib以及后缀,只写-lmylib。有些Linux版本不带静态c库,如果需要静态链接还需要安装静态c库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值