链接库

静态库和动态库

编译: 对源文件做词法分析、语法分析、语义分析等操作,最终生成多个目标文件(二进制文件中会有一个main函数的标识符)

链接: 对于各个目标文件中缺失的函数和变量的存储地址(后续简称“缺失的地址”),由链接器负责修复,并最终将所有的目标文件和链接库组织成一个可执行文件

库文件重复使用的代码块

链接库是二进制文件,但无法独立运行,必须等待其它程序调用,才会被载入内存

hello.cpp这样的"开源"的库文件很难找到,多数程序员并不会直接分享源代码,他们更愿意分享库文件的二进制版本——链接库

链接器可以在两个地方起作用: 编译和运行阶段

静态链接库无论缺失的地址在目标文件中还是链接库中, 链接器都逐个找到它们, 然后生成整个可执行文件, 这个可执行文件可以独立载入内存. 链接的这些链接库, 叫做静态链接库

动态链接库链接器先从所有目标文件中找到一部分缺失的地址, 生成可执行文件. 此时仍缺失部分函数和变量的地址, 代文件执行时, 需连同剩余的的链接库文件一起载入内存, 再由链接器修复剩余缺失的地址. 这些剩余的链接库叫做动态链接库.

静态库 动态库
编译时链接到可执行文件中 运行时链接
Linux中 .a .so
Windows .lib .dll
每一个可执行文件一份 一份, 可共用

依赖管理

这样,使用者C只需要把A的include文件夹设置为include directory,便可以使用A库所提供的功能了

如果引用src中的东西, 容易造成代码混乱. 引用include能够避免.

A --
   |--src
       |--A.h
       |--A.cpp
   |--include
       |--A.h

B --
   |--include
       |--B.h

include中代码, 引用真正的 A.h

#include "../src/A.h"
posted @ 2023-06-19 19:28  无形深空  阅读(34)  评论(0编辑  收藏  举报