VScode配置C/C++环境
- 静态库和动态库的基本概念
- 静态库和动态库的创建
- 静态库和动态库的使用
- Makefile写法
一、静态库和动态库的基本概念
静态库和动态库简单理解就是对目标文件的打包操作
1.1 静态库
一般情况下的静态库命名规则:
- lib开头
- .lib结尾 —>Windows
- .a结尾 —>Linux
例如:
- libxxx.lib 的名字就是xxx
- libyyy.a 的名字就是yyy
在Windows下.lib和.a都可以表示静态库,但是使用的时候
- .lib的静态库需要用lib加名字
- .a的静态库只需要用名字
静态库的特点:
- 编译阶段完成
- 在链接的时候把静态库的**“内容”**放到最终的可执行文件中
- 静态库一旦嵌到可执行文件中就可以直接运行程序,静态库和程序本身再无关系
- 把静态库嵌入到可执行文件中会使可执行文件的体积变大
lib: library 库
a : archive 档案
1.2 动态库
动态库:有**“动态链接库”和“共享对象”**的叫法。
一般情况下的动态库命名规则:
- lib开头
- .dll结尾 —>Windows
- .so结尾 ---->Linux
例如:
- libxxx.dll 是名为xxx的动态库
- libyyy.so 是名为yyy的动态库
DLL: Dynamic Link Library 动态链接库
SO: Shared Object 共享对象
动态库的特点:
- 程序运行的时候才会使用到动态库中的内容
- 在链接的时候把动态库的**“访问方式”**放到可执行文件中
- 使用动态库而生成的可执行文件必须依赖到动态库才能成功的运行程序
- 使用动态库的可执行文件体积相对于使用静态库的小
1.3 静态库和动态库的简单区别
从静态库和动态库的特点就可以看得的是,静态库的优点就是动态库的缺点,动态库的优点就是静态库的缺点。
二、静态库和动态库的创建
- 使用命令行创建静态库和动态库
关于静态库和动态库的创建要注意的事项:
- 操作系统不同,静态库和动态库的内部格式不同
- 同操作系统,不同编译器,静态库和动态库的生成方式也不同
- 同操作系统,不同编译器,静态库和动态库的使用方式也不同
- 静态库和动态库的创建和使用一定是基于指定的操作系统和编译器才可以
2.1 基于Widows,MinGW的静态库的创建
头文件:myMath.h
#ifndef _myMath_H_
#define _myMath_H_
typedef struct MyMath
{
int a;
int b;
}myMath;
MyMath* creatMathObject(int a,int b);
int add(MyMath* mobj);
int sub(MyMath* mobj);
void delMathObject(MyMath* mobj);
#endif
源文件:myMath.c
#include "myMath.h"
#