Linux入门 系统编程三 嵌入式开发 使用gcc制作静态库&动态库,及调用库头文件应用

一、静态库的制作与使用

生成静态的主要是有5个步骤
1、编写源代码
2、将要编译成库的源文件编译成.o文件
3、使用ar命令创建静态库
4、调用库
5、测试

静态库的命名规则:lib开头。.a结尾。lib和.a中间的称作库名。lib+库名称作库文件名

1.1 先写两个测试程序,这里使用mylib.c和test.c

mylib.c

#include <stdio.h>
#include <stdlib.h>

void mylib(void) {
	printf("this is mylib\r\n");
}

mylib.h就是为了声明一下函数便于使用头文件调用

#ifndef __MYLIB_H
#define __MYLIB_H

void mylib(void);

#endif

test

#include <stdio.h>
#include <stdlib.h>
#include "mylib.h"
i
nt main(int argv, char *argc[]) {
	mylib();
	return 0;
}

建好后:
在这里插入图片描述

1.2 生成 .o文件
gcc -c mylib.c -o mylib.o

在这里插入图片描述

1.3 生成库
ar -cr libmylib.a mylib.o

在这里插入图片描述

1.4 编译测试程序,调用库函数
gcc test.c -lmylib -L .

这里编译的程序是:test.c
-l后面跟的是库名,就是要调用哪个库
-L后面跟的是库所在的目录
在这里插入图片描述

1.5 测试

如愿打印了库中的函数:
在这里插入图片描述

二、动态库的制作与使用

动态库制作和使用的步骤
动态库也叫做分享库
1、编写源代码
2、将要编译成库的源文件编译成.o文件
3、使用gcc命令创建动态库
4、添加库路径
5、调用库
6、测试

1.1 代码还是使用以上的程序,只是拷贝了一份

在这里插入图片描述

1.2 编译成.o文件
gcc -c -fpic mylib.c -o mylib.o

在这里插入图片描述

1.3 创建动态库

gcc -shared -o libmylib.so mylib.o
在这里插入图片描述

1.4 设置库的路径

默认情况下搜索动态库的路径在/lib/和/usr/lib。

所以。
方式1、可以拷贝动态库到上面的两个目录之一下面。
方式2、添加环境变量,只有当前终端有效

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/topeet/share/SystemPrg/06

方式3、修改 /etc/ld.so.conf文件,添加生成动态库的路径到该文件中,并使用ldconfig更新一下即可。

1.5 编译测试程序,调用库函数
gcc test.c -lmylib -L .

在这里插入图片描述

1.6 测试

在这里插入图片描述

补充,编译成rk3568的可执行程序

步骤和Ubuntu下的方法类似,只是把gcc改成交叉编译器 aarch64-linux-gnu-gcc
如下:
在这里插入图片描述
开发板运行:
在这里插入图片描述

以防学习后忘记,小记一下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好,我来为您编写这两个函数并建立文件。 第一个函数用于求解数组的最大值和最小值,可以采用遍历数组的方式实现: ```c #include <stdio.h> void find_min_max(int arr[], int size, int *min, int *max) { *min = arr[0]; *max = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] < *min) { *min = arr[i]; } if (arr[i] > *max) { *max = arr[i]; } } } ``` 第二个函数用于求某个数在数组中出现的次数,同样可以采用遍历数组的方式实现: ```c #include <stdio.h> int count_num(int arr[], int size, int num) { int count = 0; for (int i = 0; i < size; i++) { if (arr[i] == num) { count++; } } return count; } ``` 接下来,我们可以将这两个函数打包成一个文件: ```c #include <stdio.h> void find_min_max(int arr[], int size, int *min, int *max) { *min = arr[0]; *max = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] < *min) { *min = arr[i]; } if (arr[i] > *max) { *max = arr[i]; } } } int count_num(int arr[], int size, int num) { int count = 0; for (int i = 0; i < size; i++) { if (arr[i] == num) { count++; } } return count; } ``` 然后,我们可以将这个文件编译成静态库: ``` gcc -c libutils.c -o libutils.o ar rcs libutils.a libutils.o ``` 最后,我们可以在我们的主程序中使用这个文件: ```c #include <stdio.h> #include "libutils.h" int main() { int arr[] = {3, 5, 1, 2, 4}; int size = sizeof(arr) / sizeof(arr[0]); int min, max; find_min_max(arr, size, &min, &max); printf("min = %d, max = %d\n", min, max); int count = count_num(arr, size, 3); printf("count = %d\n", count); return 0; } ``` 编译并运行程序: ``` gcc main.c -L. -lutils -o main ./main ``` 输出结果为: ``` min = 1, max = 5 count = 1 ``` 至此,我们完成了两个函数的编写和文件的建立,并成功调用了这些函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值