Linux下创建一个自己的小型函数库(c 静态库)

1. 编写源文件

1. fun1.c
#include <stdio.h>

void Fun1(int arg)
{

	printf("Fun1: we passed %d\n", arg);

}

2. fun2.c
#inclued <stdio.h>

void Fun2(char * arg)
{

	printf("Fun2: we passed %s\n", arg);

}

上面两个.c文件是库中的函数实现所需的源文件 。

2. 编译产生目标文件

$ gcc -c fun1.c fun2.c

$ ls *.o
gcc -c 会生成 .o的目标文件如下图:
在这里插入图片描述

3. 调用函数的程序

首先为库文件创建一个头文件(lib.h),里面包含fnn1 和fun2的声明,并且他应该被调用程序(program.c)所在文件包含。

1.lib.h
// This is lib.h
#ifndef LIB_H
#define LIB_H

void Fun1(int);
void Fun2(char *);

#endif
2.program.c
#include <stdio.h>

#include "lib.h"

int main()
{

	Fun2("Hello world!");

	exit(0);
}

4. 编译并测试这个程序

$ gcc -c program.c
编译program.c文件生成.o目标文件;
$ gcc -o program program.o fun2.o
将program.o文件和fun2.o文件链接生成可执行程序program;
$ ./program
运行program可执行程序结果如下。
在这里插入图片描述
如图所示运行结果为Fun2: we passed Hello wprld!

5. 创建并使用库文件

###### 重点来了 ######
###### 重点来了 ######
###### 重点来了 ######
重要的事情说三遍,哈哈 !!!!!!!

现在可以使用ar程序创建一个归档文件(即库文件),并将你的目标文件添加进去。
$ ar crv libfoo.a fun1.o fun2.o
在这里插入图片描述
如图所示libfoo.a库文件已经创建成功,你的目标文件也添加进去了。下一步需要为库函数生成内容表才可以使用函数库。
$ ranlib libfoo.a
执行上述命令,你的函数库便可以使用了

使用函数库创建你的程序

$ gcc -o program program.o libfoo.a
或者使用-L来访问函数库。
$ gcc -o program program.o -L. -lfoo

这里命令中的-L.告诉编译器在当前目录中查找函数库(因为这个库不在标准位置,所有加-L项告诉编译器路径)。-lfoo告诉编译器使用libfoo.a的函数库。

6. 查看库中的函数

可以在命令行输入$ nm 'filename'查看文件中的函数。
例如program中:
在这里插入图片描述
由上图可知program可执行程序文件中只包含Fun2函数;
在这里插入图片描述
但是在libfoo.a中包含Fun1Fun2 两个函数,

所以,在program.c 中虽然包含lib.h头文件,但是在程序被创建时,只包含它实际需要的函数,不会将整个函数库包含在程序中。

写在最后的话:好了,今天的是静态库,以后再说说共享库!!!

最后的最后附上一段有趣的代码:

int main()
{
	while (i.love( you ))
	{
		if (you.have( boyfriend ))
		{
			becomeFriends(you, i);
		}
		else
		{
			if (you.think( i.am( charming )))
			{
			string msg = "I love you";
			
			cout << msg << you.have << endl;
			}
			else
			{
				i = you.Look4InAMan();
			}
		}
	}
	
	return 0;
}

如果你觉得我是一个有趣的人,我想那最好不过的了。

但事实往往是:

Error 404:  Girlfriend Not Found.

哎,这不是我要的结果啊!!!!!(哭晕在厕所…)

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值