Linux——分文件编程与动静态库的生成与使用

分文件编程

分文件编写(模块化编程)的含义是将一个程序的代码分多个文件存储,也就是将不同的功能模块放在不同的文件中,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。

主要含有三个部分:
后缀为 .h 的头文件 (函数声明)
后缀为 .c 的源文件(函数实现)
后缀为 .c 的main函数主源文件(程序运行的入口)

编译:gcc xx.c xxx.c -o xx就可以了
注意:主函数源文件需要包含头文件 #include " xxxx.h "
你要用这个函数当然得和它打声招呼吧,之后就直接调用即可
例子:
calculator.h

int add(int data1,int data2);
int minus(int data1,int data2);
int multiply(int data1,int data2);
float division(int data1,int data2);

calculator.c

int add(int data1,int data2)
{
	int ret;
	ret = data1+data2;
	return ret;

}

int minus(int data1,int data2)
{
	int ret;
	ret = data1-data2;
	return ret;

}

int multiply(int data1,int data2)
{	
	int ret;
	ret = data1*data2;
	return ret;
	
}


float division(int data1,int data2)
{	
	float ret;
	ret = (float)data1/data2;
	return  ret;
	
}

test.c

#include <stdio.h>
#include "calculator.h"
int main()
{
	int data1;
	int data2;
	
	printf("Please input NO.1:");
	scanf("%d",&data1);
	
	printf("Please input NO.2:");
	scanf("%d",&data2);

	
	printf("add:%d\n",add(data1,data2));
	printf("minus:%d\n",minus(data1,data2));
	printf("multiply:%d\n",multiply(data1,data2));
	printf("division:%f\n",division(data1,data2));


}

库的介绍

    使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。  

程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):

1、静态函数库,是在程序执行前就加入到目标程序中去了 ;

2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)
Linux中命名系统中共享库的规则
在这里插入图片描述

静态库的制作与使用

在 Linux 中静态库以 lib 作为前缀,以.a 作为后缀,中间是库的名字自己指定即可,即: libxxx.a
静态库的制作:格式libxxx.a
1.gcc calculator.c -c 生成xxx.o文件
在这里插入图片描述

2.ar rcs libcalculator.a calculator.o xxx.o文件生成libxxx.a静态库文件
在这里插入图片描述
静态库怎么使用?
gcc test.c -lcalculator -L ./ -o maninProStatic
在这里插入图片描述
-l:是制定要用的动态库,库名砍头去尾
-L:告诉gcc编译器从-L制定的路径去找静态库。默认是从/usr/lib /usr/local/lib去找
-o:给生成的可执行文件命名

动态库的制作与使用

在 Linux 中动态库以 lib 作为前缀,以.so作为后缀,中间是库的名字自己指定即可,即: libxxx.so
1.gcc -shared -fpic calculator.c -o libcalculator.so
在这里插入图片描述
-shared 指定生成动态库
-fpic 标准,fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。
动态库怎么使用?
gcc test.c -lcalculator -L ./ -o mainProDy
在这里插入图片描述
-l:是制定要用的动态库,库名砍头去尾
-L:告诉gcc编译器从-L制定的路径去找静态库。默认是从/usr/lib /usr/local/lib去找
-o:给生成的可执行文件命名

没找到动态库报错
在这里插入图片描述

(注意:要正常使用该可执行文件,要把生成的libxxx.so拷贝到/usr/lib /usr/local/lib里面去,或者使用下面临时增加环境指定路径去找)
带动态库的程序,
可以指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件
例子:
export LD_LIBRARY_PATH=“/home/lhq/demo”

也可以写一个脚本去执行:
在这里插入图片描述

动静态库的优缺点

a)静态库
静态函数库,是在程序执行前(编译)就加入到目标程序中去了 ;
优点: 运行快
发布程序无需提供静态库,因为已经在app中,移植方便
缺点:大
在这里插入图片描述
b)动态库
动态函数库,是在程序执行时动态(临时)由目标程序去调用
缺点: 运行慢
优点: 小
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值