不论是 gcc 还是 g++ 都会把 .c 或者 .cpp 文件转换成 .o 文件
此时,函数都会在 .o 文件里,我们就需要把 .o 文件连接在一起
但当 .cpp 文件非常多时,命令就会非常长,为了避免这种情况,我们把功能类似的 .o 文件打包在一起
分类 | 作用 | 后缀 |
---|---|---|
静态库 | 一个或多个.o目标文件归档在一个文件中 | .a |
共享库 | 没有main函数的可执行文件 | .so |
动态加载库 | 没有main函数的可执行文件,接口复合API | .so |
0. 先创建几个文件
add.h 文件内容:
#pragma once
#ifdef __cplusplus
extern "C"{
#endif // __cplusplus
int add(int a,int b);
#ifdef __cplusplus
}
#endif // __cplusplus
add.cpp 文件内容:
#include "add.h"
int add(int a,int b){
return a+b;
}
float add(float a,float b){
return a+b;
}
Func.h 文件内容:
#pragma once
#ifdef __cpluseplus
extern "C" {
#endif
void Func(int n);
#ifdef __cpluspluse
}
#endif
Func.cpp 文件内容:
#include "Func.h"
#include <iostream>
using namespace std;
void Func(int n){
cout << n << endl;
}
main.cpp 文件内容:
#include "Func.h"
int main(){
Func(100);
}
1. 静态库的制作与使用
创建:
通常,生成静态库,我们使用命令 ar -rcs libtest.a test.o
其中
命令选项 | 作用 |
---|---|
r | 替换模块(replace) |
c | 创建库(create) |
s | 建立索引 |
静态库包名前面必须以 lib 开头,后缀必须为 .a
使用:
通常,使用静态库,用命令 g++ main.cpp -L. -ltest