1.静态库&&动态库
Windows平台下:静态库后缀为.lib,动态库后缀为.dll
Linux平台下:静态库格式为lib**.a,动态库格式为lib**.so
谈论两者区别之前,需要对程序编译和运行有一个大致认识:
代码想要输出结果,需要经过代码编译和可执行程序运行,就是编译和运行(链接)这两步。
两种类型的库在其中起着不同的作用,这也就是为什么有时候代码编译通过,但是无法运行(eg:缺失dll)
静态库和动态库的区别:
静态库在编译过程中就已经引用并链接到了,有问题编译这一步就会报错;动态库在编译过程中只是起到一个简单的引用,可以理解为单纯检查有没有引用,但是在可执行程序运行的过程中会进行链接。
编译:以一个函数为例,编译这个过程只检查这个函数声明与否,并不检查函数是否实现
2.Windows 11平台
编译器用的是VScode,编译套件用的是MSVC(一开始用的是mingw,但是生成的库怎么给我默认搞成Linux下的lib.a了,后来改成MSVC)
vscode下可以安装一个插件Output Colorizer,这个可以给output添加一些颜色,方便查看
就用很简单的代码结构来试验,
Ctrl+shift+p:打开cmake configure,下面会出现选择编译器和生成调试按钮
(1)直接用cpp
main.cpp
#include "../header/add.h"int main()
{int result = 0;int a = 1, b = 2;result = add(a, b);cout << result << endl;
}
add.cpp
int add(int a, int b)
{return a + b;
}
add.h,头文件就是负责声明的
#include <iostream>
using namespace std;int add(int a, int b);
cmakelists.txt:
cmake_minimum_required(VERSION 3.5)project(Cmake_test)add_executable(main src/main.cpp src/add.cpp)
没有用到任何库文件,只是将两个cpp文件生成了一个main.exe可执行程序
思考一个问题:c++为什么要用头文件?
当然可以不写头文件,只在main.cpp中声明一下int add()就好,但是不符合规范,使用头文件能减少重复,
这个add.h头文件中就只有一个add函数声明,无法体现。假设需要100个函数,如果还不用头文件就需要在所有需要用到某个函数的cpp文件中声明,工作量极大,如果这时还要修改某个函数的实现…更是离谱