博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态链接库设计
阅读量:4284 次
发布时间:2019-05-27

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

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
#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库。

转载地址:http://umigi.baihongyu.com/

你可能感兴趣的文章
让es进行后端进程的方式启动
查看>>
es2.4.5 离线安装head插件
查看>>
实战项目经验得到的常用linux命令(-)
查看>>
Mysql的设计规范和结构优化(-)
查看>>
查看是否安装mysql以及是否正在运行的mysql
查看>>
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。
查看>>
springboot注解中@controller和@restcontroller,以及@springbootApplication注解的区别和联系
查看>>
hbase 常用过滤器filter--------------------------有这篇文章就够了,舍我其谁!!!!
查看>>
【十问评估经营理念】
查看>>
Android调用天气预报的WebService简单例子
查看>>
出现An internal error occurred during: "Building workspace".的解决方法
查看>>
ext4.2入门简单小例子(button的事件--对话框的几种使用情况)
查看>>
nodejs:在windows系统中安装node.js 及第一个程序Hello World
查看>>
ExtJS 4.2心得和总结:布局系统详解(Ext.layout.container)
查看>>
数据结构几种排序算法详解和总结(java版)
查看>>
ExtJS4.2 登陆表单(Login)简单示例
查看>>
Node.js快速入门
查看>>
Node.js进行Web开发(一)--Express,路由控制,模板引擎
查看>>
阿里巴巴集团2014秋季校园招聘笔试题
查看>>
2014校园招聘_百度2014校园招聘
查看>>