gcc编译器【自定义c库】
在 C 语言中,库分为静态库(.a 文件)和动态库(.so 文件,在 Linux 系统下;.dll 文件,在 Windows 系统下)。下面以 Linux 系统为例,分别介绍如何创建静态库和动态库,并在另一个 C 语言文件中调用这些库。
1. 创建包含函数的源文件
首先,创建一个包含所需函数的 C 文件和对应的头文件。假设我们要创建一个简单的函数用于计算两个整数的和。
math_utils.c
// math_utils.c
int add(int a, int b) {
return a + b;
}
math_utils.h
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
2. 创建静态库
步骤 1:编译源文件生成目标文件
使用 gcc 编译器将 math_utils.c 编译成目标文件 math_utils.o。
gcc -c math_utils.c -o math_utils.o
-c 选项表示只进行编译,不进行链接。
步骤 2:创建静态库
使用 ar 工具将目标文件打包成静态库 libmath_utils.a。
ar rcs libmath_utils.a math_utils.o
r:将目标文件插入到静态库中。c:创建静态库,如果库文件不存在。s:写入一个目标文件索引到库中,加快链接速度。
步骤 3:在另一个 C 文件中调用静态库
main.c
#include <stdio.h>
#include "math_utils.h"
int main() {
int result = add(3, 5);
printf("3 + 5 = %d\n", result);
return 0;
}
编译并链接静态库
gcc main.c -L. -lmath_utils -o main
-L.:指定库文件的搜索路径,.表示当前目录。-lmath_utils:链接名为libmath_utils.a的静态库,-l后面跟库名去掉lib前缀和.a后缀。
运行程序
./main
3. 创建动态库
步骤 1:编译源文件生成目标文件
使用 gcc 编译器将 math_utils.c 编译成目标文件 math_utils.o,并添加 -fPIC 选项,生成位置无关代码。
gcc -fPIC -c math_utils.c -o math_utils.o
-fPIC 选项确保生成的代码可以在不同的内存地址加载和执行。
步骤 2:创建动态库
使用 gcc 编译器将目标文件链接成动态库 libmath_utils.so。
gcc -shared -o libmath_utils.so math_utils.o
-shared 选项表示创建动态库。
步骤 3:在另一个 C 文件中调用动态库
main.c(与静态库示例中的 main.c 相同)
#include <stdio.h>
#include "math_utils.h"
int main() {
int result = add(3, 5);
printf("3 + 5 = %d\n", result);
return 0;
}
编译并链接动态库
gcc main.c -L. -lmath_utils -o main
同样,-L. 指定库文件的搜索路径,-lmath_utils 链接名为 libmath_utils.so 的动态库。
设置动态库搜索路径
在运行程序之前,需要告诉系统在哪里可以找到动态库。可以通过设置 LD_LIBRARY_PATH 环境变量来实现。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
这将当前目录添加到动态库搜索路径中。
运行程序
./main
通过以上步骤,你可以创建静态库和动态库,并在另一个 C 语言文件中调用这些库。静态库在链接时会被完整地包含在可执行文件中,而动态库在运行时才会被加载。

浙公网安备 33010602011771号