1.什么是库
库lib是编译好的二进制代码,可以被操作系统载入内存执行,一般是预先编译好的函数的集合,可以通过头文件链接到库文件,执行已经编译好的代码段。
库一般分为静态库(static lib,在linux系统一般是.a文件)和动态库(dynamic lib,也叫共享库,在linux系统一般是.so文件)。二者的不同点在于被载入的时间不同:
静态库.a在编译的过程中会被编译到可执行文件,也就是说会增大可执行文件的体积。
动态库则是在执行的过程中才会去读取.so文件,不用编译进可执行程序,因此可执行程序体积较小。缺点是拷贝代码时如果没有.so文件可能会造成无法执行。‘
2.静态库
静态库
程序在编译阶段会把静态库的内容复制到目标文件中,在链接阶段将引用的静态库打包到可执行文件中。因此称为静态链接。这里可以发现,静态链接将静态库直接打包进入可执行文件,那么他的组织形式一定和.o文件类似。
实际上,一个静态库是一组目标文件的集合(.o),很多目标文件被打包成一个文件,并且直接参与链接。
静态库有以下特点:
1.静态库对函数的链接是在编译时完成的
2.程序在运行时不再需要静态库,因为对应的程序段已经被复制到原来的位置,移植方便。
3.可执行文件占用空间较大,因为静态库内容被复制进入了可执行文件编译结果。
创建静态库
linux静态库的创建命名规则:lib[library_name].a,lib为前缀,中间是库名,.a为扩展名。
创建静态库
现在有如下代码,一定要把头文件和函数体分开声明,否则使用静态库的时候没有头文件只能猜了哦。
**
* @file: unite_time.h
* @author: mattbaisteins@gmail.com
* @date: 2020-08-03
* @brif:
**/
#ifndef _UNITE_TIME_H
#define _UNITE_TIME_H
#include #include #include #include #include #define BUFFER_SIZE 4096
/*
* get time yymmdd, eg. 190803
* @param void
* @return string now_time
*/
std::string get_time();
#endif // end _UNITE_TIME_H
/**
* @file: unite_time.cpp
* @author: mattbaisteins@gmail.com
* @date: 2020-08-03
* @brif:
**/
#include