- 2
- 0
- 约4.3千字
- 约 11页
- 2020-06-08 发布于陕西
- 举报
C++静态库与动态库深入研究
什么是库
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不
可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态
库(.a、.lib)和动态库(.so、.dll)。
所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:
静态库
之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链
接打包到可执行文件中。因此对应的链接方式称为静态链接。
试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格
式相似。其实一个静态库可以简单看成是一组目标文件 (.o/.obj文件)的集合,即很多目标文件经
过压缩打包后形成的一个文件。静态库特点总结:
静态库对函数库的链接是放在编译时期完成的。
程序在运行时与函数库再无瓜葛,移植方便。
浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
下面编写一些简单的四则运算C++类,将其编译成静态库给他人用,头文件如下所示:
#pragma once
class StaticMath
{
public:
StaticMath(void);
~StaticMath(void);
static double add(double a, double b);//加法
static double sub(double a, double b);//减法
static double mul(double a, double b);//乘法
static double div(double a, double b);//除法
void print();
};
inux下使用ar工具、Windows下vs使用lib.exe,将目标文件压缩到一起,并且对其进行编号
和索引,以便于查找和检索。一般创建静态库的步骤如图所示:
Linux下创建与使用静态库
Linux静态库命名规则
Linux静态库命名规范,必须是”lib[your_library_name].a”:lib为前缀,中间是静态库名,
扩展名为.a。
创建静态库(.a)
通过上面的流程可以知道,Linux创建静态库过程如下:
首先,将代码文件编译成目标文件.o (StaticMath.o)
g++ -c StaticMath.cpp
注意带参数-c,否则直接编译为可执行文件
然后,通过ar工具将目标文件打包成.a静态库文件
ar -crv libstaticmath.a StaticMath.o
生成静态库libstaticmath.a。
大一点的项目会编写makefile文件(CMake等等工程管理工具)来生成静态库,输入多个命令
太麻烦了。
使用静态库
编写使用上面创建的静态库的测试代码:
#include StaticMath.h
#include
using namespace std;
int main(int argc, char* argv[])
{
double a = 10;
double b = 2;
cout a + b = StaticMath::add(a, b) endl;
cout a - b = StaticMath::sub(a, b) endl;
cout a * b = StaticMath::mul(a, b) endl;
cout a / b = StaticMath::div(a, b) endl;
StaticMath sm;
sm.print();
system(pause);
return 0;
}
Linux下使用静态库,只需要在编译的时候,指定静态库的搜索路径 (-L
您可能关注的文档
最近下载
- 2024年潍坊护理职业学院高职单招(英语/数学/语文)笔试2018-2023历年真题摘选带答案解析.docx VIP
- 《智能管理系统创新与发展》课件.ppt VIP
- 仁爱版七年级下册英语单词默写表(中文版).pdf VIP
- 2025年潍坊护理职业学院单招笔试数学试题库含答案解析.docx VIP
- 2025郑州中考一模化学试卷.docx VIP
- 2025河北单招第七类综合素质真题 .pdf VIP
- 2025黑龙江林业职业技术学院单招《数学》经典例题含答案详解(能力提升).docx VIP
- 大病低保申请书.docx VIP
- 发热伴血小板减少综合征药物治疗指南(2025年版)解读PPT课件.pptx VIP
- 2020泰和安TG3100广播控制盘安装使用说明书.pdf VIP
原创力文档

文档评论(0)