欢迎光临
我们一直在努力

C 语言 静态链接库 (.a/.lib) & 动态链接库 (.so/.dll) 制作与使用(嵌入式 / PC 端全流程,附代码 + 命令)

C 语言 静态链接库 (.a/.lib) & 动态链接库 (.so/.dll) 制作与使用(嵌入式 / PC 端全流程,附代码 + 命令)

你问的静态链接库和动态链接库是 C 语言代码复用、工程化开发的核心—— 嵌入式开发中常用静态库(.a)封装驱动 / 算法,PC 端常用动态库(.so/.dll)实现模块热更新。我会分「Linux / 嵌入式(GCC)」和「Windows(MinGW/VS)」两个场景,讲透库的制作步骤、使用方法、核心区别,代码和命令可直接复制使用 ✅


前置核心概念(先理清,避免混淆)

类型
后缀(Linux / 嵌入式)
后缀(Windows)
核心特点
静态链接库 .a(Archive) .lib 编译时将库代码完整拷贝到可执行文件,运行时不依赖库文件,体积大、无依赖
动态链接库 .so(Shared Object) .dll 编译时只记录库的引用,运行时动态加载库代码,体积小、需依赖库文件

嵌入式场景(STM32/ARM):几乎只用静态库(无动态加载环境,且追求运行独立性);PC 场景(Linux/Windows):两者都用,动态库适合频繁更新的模块(如插件、算法库)。


一、Linux / 嵌入式(GCC 编译器)—— 静态库 (.a) & 动态库 (.so) 制作

准备测试代码(封装 ADC 滤波算法,工程化结构)

先创建如下文件结构,模拟 “封装算法库→调用库” 的工程:

adc_lib/
├── src/
│ ├── adc_filter.c # 库的实现文件
│ └── adc_filter.h # 库的头文件(对外暴露接口)
└── main.c # 测试程序(调用库)

1. 头文件 adc_filter.h(对外暴露接口)

#ifndef __ADC_FILTER_H__
#define __ADC_FILTER_H__

// 一阶低通滤波函数(对外暴露的接口)
unsigned short adc_lowpass_filter(unsigned short adc_raw);

#endif

2. 实现文件 adc_filter.c(库的核心逻辑)

#include \”adc_filter.h\”

static unsigned short last_val = 0; // 静态变量,仅库内可见

// 低通滤波实现(核心逻辑封装在库内)
unsigned short adc_lowpass_filter(unsigned short adc_raw)
{
last_val = (adc_raw + 7 * last_val) / 8; // α=1/8
return last_val;
}

3. 测试程序 main.c(调用库接口)

#include <stdio.

赞(0)
未经允许不得转载:171主机测评 » C 语言 静态链接库 (.a/.lib) & 动态链接库 (.so/.dll) 制作与使用(嵌入式 / PC 端全流程,附代码 + 命令)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址