前言
注意就像windows和linux平台中编译的库文件是不通用的,则使用一个arm gcc编译出来的库要在对应的arm gcc系列的工程中使用这个库。
一、Keil的库封装
1.1 准备好要制作一个静态库的对应的c文件和h文件
cpp
#ifndef __SIMPLE_LIB_H__
#define __SIMPLE_LIB_H__
// 加法
int add(int a, int b);
// 减法
int subtract(int a, int b);
// 乘法
int multiply(int a, int b);
// 除法 (注意:调用者需保证除数不为0,或在函数内处理)
int divide(int a, int b);
#endif /* __SIMPLE_LIB_H__ */
cpp
#include "simple_lib.h"
// 加法实现
int add(int a, int b) {
return a + b;
}
// 减法实现
int subtract(int a, int b) {
return a - b;
}
// 乘法实现
int multiply(int a, int b) {
return a * b;
}
// 除法实现
int divide(int a, int b) {
// 安全检查:防止除数为0导致程序崩溃
if (b == 0) {
// 实际项目中,这里可以返回特定的错误码或全局错误变量
return 0;
}
return a / b;
}
1.2 建立一个keil空的工程(如果库代码和处理器的库函数无关,则处理器型号选哪个都可以)
1.3 将其c文件和h文件加入keil的工程当中,然后如果是只有一个c文件可以不用在魔法棒中添加h文件的路径,但是如果是有引用外部的文件需要添加头文件的路径


1.4 keil环境下Lib库的生成,打开魔法棒在output中设置为输出结果是lib库文件,选择创建lib文件则不会输出hex文件


1.5 默认输出位置在objects中

1.6 演示如何使用该simple_lib库,创建一个正常的STM32的工程,然后将库,像c文件一样加入到工程当中,然后一定添加头文件路径,库的头文件一定要对应库


编译未报错,则成功
二、IAR的库封装
2.1 准备库的c文件和头文件
2.2 使用一个正常的基于GD32的IAR工程,将c文件和头文件加入工程结构中,同时屏蔽其他文件,右键文件或者文件夹的options,options的左上角勾选上Exclude from build,从而不编译其他文件,点ok


2.3 设置整个工程为输出库,而不是正常的编译模式,右键总工程图标,进入options的General Options,然后进入其output,选lib模式。同时,再进入左侧的Library Builder选项卡,设置输出库的具体文件夹路径,注意IAR默认的库是.a结尾,记得点ok




全编译

2.4 编译成功


复制一下到外部文件中

2.5 切回正常编译模式,然后,将库加入工程并进行验证,屏蔽或者移除库的c文件,记得添加库的头文件的路径到工程



2.6 补充添加库的方式有两种,一种是上一步的直接添加文件到左侧的工程结构中;二是使用工程设置中的链接选项中的library设置指定库位置,两种都使用会导致重复警告

使用工程设置中的链接选项中的library设置指定库位置


2.7 全编译成功,则为成功使用了库文件simple_lib.a
