博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Linux】 静态函数库设计
阅读量:7253 次
发布时间:2019-06-29

本文共 1632 字,大约阅读时间需要 5 分钟。

一、外部函数来源—— 函数库&系统调用

1143923-20170802114601818-2067078418.jpg

二、函数库分类

  • 静态函数库 ——多份拷贝
  • 动态函数库 ——单份拷贝
区别 链接方式区别

1143923-20170802115143708-511398242.jpg

1143923-20170802114624271-832803927.jpg

三、函数库存放位置

Linux应用程序使用的主要函数库均存放于/lib, /usr/lib目录下,

其中采用.so.方式命名的是动态函数库,而以*.a方式命令的是静态函数库。

四、静态函数库特点

  • 程序所要用到的库函数代码在链接时全部被copy到程序中。
  • 导致的问题:如果有多个进程在内存中同时运行,并且使用了相同的库函数,那么就会有多份拷贝,这就是对空间的浪费。

五、使用静态函数库——编译选项

/* 查看使用了何种函数库 */readelf -d hello

1.Linux下进行链接时默认是链接动态库

2.如果需要使用静态库,需要使用编译选项-static

/* 使用静态库-编译选项 */ gcc -static hello.c -o hello

图片 找不到静态库:RedHat enterprise 默认不提供

1143923-20170802114723833-1270578573.jpg

解决方法: 安装静态函数包

//需在root权限下进行glibc-static-2.12-1.80.el6.i686.rpm

1143923-20170802114744208-183208928.jpg

图片 大小区别——静态链接后的程序大小更大

图片 静态链接

1143923-20170802114759474-326933404.jpg

图片 动态链接

1143923-20170802114810349-568495557.jpg

六、设计自定义静态函数库

步骤:

1. gcc –c mylib.c –o mylib.o    2. ar cqs libmylib.a mylib.o //将一组编译过的文件合并为一个文件    3. 将制作好的libmylib.a 复制到/usr/lib

1143923-20170802114839474-538073929.jpg

1143923-20170802114901536-15510505.jpg

计算个人所得税程序

/********************************文件名:tax.c*创建时间:2017-8-2*创建者:Stephen Sun*程序说明:个人所得税率计算函数库*****************************/#include 
int tax (int salary,int insurance){ int tax_salary = salary -insurance; int tmp = tax_salary - 3500; if(tmp<0) { printf("You don't need to tax!\n"); return 0; } if(tmp<1500) { return tmp*0.03-0; } if(tmp>1500&&tmp<=4500) { return tmp*0.1 -105; } if (tmp>4500&&tmp<=9000) { return tmp*0.2 -555; } if (tmp>9000&&tmp<=3500) { return tmp*0.25 -1005; } if (tmp>35000&&tmp<=55000) { return tmp*0.3 -2755; } if (tmp>55000&&tmp<=80000) { return tmp*0.35 -5505; } if (tmp>80000) { return tmp*0.45 -13505; }}

图片步骤:设计个人所得税函数库

1143923-20170802114826396-1626436315.jpg

七、使用自己设计的静态函数库

-lname:GCC在链接时,默认只会链接C函数库,而对于其他的函数库,则

需要使用-l选项来显示地指明需要链接。

gcc test.c –lmylib -o test

Result

1143923-20170802114930083-2105324385.jpg

转载于:https://www.cnblogs.com/Neo007/p/7273134.html

你可能感兴趣的文章
详解Python模块导入方法
查看>>
mysql一些权限相关操作,数据库可以远程连接或者说用IP地址可以访问
查看>>
关于c#(vs)dategridview控件继承不能修改的问题
查看>>
JAVA通过使用sort方法排序
查看>>
跨域CORS 、第二章
查看>>
一秒去除Win7快捷方式箭头
查看>>
Linux上Simplescalar/ARM的安装和运行文档
查看>>
中断是CPU的机制
查看>>
DoD and DoR
查看>>
golang 资源
查看>>
关于FileFOutputStream应用中的FileNotFoundException问题
查看>>
[产品设计] - 设计理念
查看>>
关于gitblit成功启动,但在阿里云外网地址无法访问的问题
查看>>
C++访问MySql
查看>>
1056. 组合数的和(15)
查看>>
Git基础教程(一)
查看>>
css解决select下拉表单option高度的办法
查看>>
「洛谷P1198」 [JSOI2008]最大数 解题报告
查看>>
C# 里EF 对Mysql DB更新,乱码
查看>>
iOS - IM 即时通讯
查看>>