静态库和动态库
静态库
要创建静态库,您需要遵循以下步骤:
- 创建源文件和头文件
- 使用GCC生成对象文件
- 使用ar命令将对象文件打包成静态库
- 使用静态库编译您的程序
以下是一个示例,演示了如何创建和使用静态库:
// 创建头文件 mymath.h
int add(int a, int b);
int sub(int a, int b);
int mult(int a, int b);
int divi(int a, int b);
// 创建源文件 add.c, sub.c, mult.c, divi.c
// ...
// 生成对象文件
$ gcc -c add.c sub.c mult.c divi.c
// 创建静态库
$ ar rs libmymath.a add.o sub.o mult.o divi.o
// 使用静态库编译您的程序
// 创建一个使用libmymath.a的示例程序 mathDemo.c
#include <mymath.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, y;
printf("Enter two numbers\n");
scanf("%d%d",&x,&y);
printf("\n%d + %d = %d", x, y, add(x, y));
printf("\n%d - %d = %d", x, y, sub(x, y));
printf("\n%d * %d = %d", x, y, mult(x, y));
if(y==0){
printf("\nDenominator is zero so can't perform division\n");
exit(0);
}else{
printf("\n%d / %d = %d\n", x, y, divi(x, y));
return 0;
}
}
// 生成示例程序的对象文件
$ gcc -I . -c mathDemo.c
// 链接示例程序和静态库,创建最终的可执行文件
$ gcc -static -o mathDemo mathDemo.o libmymath.a
这样,您就创建了一个静态库并使用它来编译您的程序。
动态库
要创建动态库,首先需要编写C代码并将其编译成动态库。然后,可以使用动态库在其他程序中调用这些函数。以下是创建和使用动态库的基本步骤:
创建动态库:
- 编写C代码并将其编译成动态库。
- 使用gcc命令将源文件编译成目标文件。
- 使用-fPIC标志生成位置无关的代码。
- 使用gcc命令将目标文件链接成动态库。
使用动态库:
- 在编译时使用-L标志指定动态库的路径。
- 在编译时使用-l标志指定要链接的动态库的名称。
- 在运行时,确保动态库文件位于LD_LIBRARY_PATH中指定的路径中,或者将动态库文件放在系统默认的动态库路径中。
下面是一个示例C代码和相应的编译命令,用于创建和使用动态库:
// example.c
#include <stdio.h>
void sayHello() {
printf("Hello from the dynamic library!\n");
}
# 创建动态库
gcc -c -fPIC example.c -o example.o
gcc -shared -o libexample.so example.o
# 使用动态库
gcc -L. -lexample -o test_program test_program.c
这些步骤将创建一个名为libexample.so的动态库,并将其用于编译名为test_program的程序。在运行test_program时,它将调用动态库中的函数sayHello。
这是一个基本的示例,实际情况可能会更复杂,具体取决于项目的需求和依赖关系。
多用组合、少用继承
基于接口而非实现进行编程