type
status
date
slug
summary
tags
icon
password

一、 C++在编译时的基本知识

在一个 C++ 工程中,并不是所有代码都会编译成可执行文件。只有带有 main 函数的文件才会生成可执行程序。而另一些代码,我们只想把它们打包成一个东西,供其他程序调用。这个东西叫做库。 一个库往往是许多算法、程序的集合。
一般来说,build一个项目的过程是先compile然后link,最后生成一个可执行文件的过程。

二、 库

库的本质是一堆函数实现的集合,函数被编译在一个文件里面。然后根据使用方式的不同分为静态库和动态库两类。在动态库里,又分为动态链接库(Dynamic linked library)和动态加载库(Dynamic load library)。

1、 静态库

静态库是在build的时候就将库里面的代码链接进可执行文件。
在静态库的方案下,库的版本更新以后,需要重新编译程序,才能将更新以后的代码起作用。
使用静态库的场景并不是很多,大多数时候是作为第三方提供SDK给别人,但是又不希望别人看到源代码的场景下。所以又静态库生成的可执行程序的特点就是体量大,速度快。

2、 动态库

动态库是分为动态链接库(Dynamic Link Library)和动态加载库(Dynamic Loaded Library)两个。

① 动态链接库

对于动态链接库而言,build可执行文件的时候需要指定它依赖哪些库,当可执行文件运行时,如果操作系统没有加载过这些库,那就会把这些库随着可执行文件的加载而加载进内存中,供可执行程序运行。如果多个可执行文件依赖同一个动态链接库,那么内存中只会有一份动态链接库的代码,然后把它共享给所有相关可执行文件的进程使用,所以它也叫共享库(shared library)。比如pthread就是一个这样的库。

② 动态加载库

对于动态加载库而言,build可执行文件的时候就不需要指定它依赖哪些库,当可执行文件运行时,如果需要加载某个库,就用dlopen、dlsym、dlclose等函数来动态地把库加载到内存,并调用库里面的函数。各大软件的插件模块基本上就都是这样的库。
图形渲染流程随便一谈-新阶段
Loading...
JucanaYu
JucanaYu
干饭人,干饭魂🍚
最新发布
在大模型的训练文件中加入swanlab来监控实验进程
2025-4-16
Python练习-类型转换
2025-4-9
Python练习-count、remove、append、extend
2025-4-8
Python练习-set和sorted
2025-4-6
Python练习-insert和del
2025-4-6
Python练习-range
2025-4-6