静态库

静态库(Static Library)是一种包含已编译的对象文件的库,它们通常以.a(Unix/Linux)或.lib(Windows)为文件扩展名。静态库中包含了一组函数、类、变量等代码,可以在编译时被链接到应用程序中,从而形成一个可执行文件。

与动态库(Dynamic Library)不同,静态库在链接时将所有代码全部复制到可执行文件中,因此可执行文件无需依赖外部库文件。这样做的好处是,可执行文件的运行效率和移植性较高,不会受到外部库文件的影响;同时,静态库也可以方便地在没有安装对应动态库的系统上进行部署。

链接静态库

创建静态库

比如,我们要创建一个实现数字加减乘功能的静态库

我们首先创建一个math.cpp

int add(int a,int b){
    return a+b;
}
int sub(int a,int b){
    return a-b;
}
int mul(int a,int b){
    return a*b;
}

然后咱们先汇编为.o文件

g++ -c math.cpp -o math.o

接着咱们把它打包成静态库

ar rcs libmath.a math.o

然后咱们编写我们的main.cpp

#include <iostream>
extern int add(int a,int b);
extern int sub(int a,int b);
extern int mul(int a,int b);
int main(void){
    int add_result = add(3,4);
    int sub_result = sub(3,4);
    int mult_result = mul(3,4);
    std::cout << "Add Result:" << add_result << std::endl;
    std::cout << "Sub Result:" << sub_result << std::endl;
    std::cout << "Mult Result:" << mult_result << std::endl;
    return 0;
}

接着用咱们的静态库

g++ main.cpp -L. -lmath -o main

image-20230720125112003