静态链接
在程序编译时将所有依赖的库文件嵌入到程序中
是指在编译程序时将程序所依赖的库文件的代码和数据复制到可执行文件中,生成一个完全独立的可执行文件,这个可执行文件在运行时不需要再依赖其他库文件。这个过程被称为静态链接。
静态链接器是一个编译器的工具,它负责将程序所依赖的库文件的代码和数据合并到可执行文件中。静态链接器在链接时会检查程序所依赖的库文件,并将这些库文件中的代码和数据复制到可执行文件中。这个过程中,静态链接器会将库文件中的所有函数和变量都复制到可执行文件中,而不管是否真正被程序使用。这会导致可执行文件的大小增加,并且在程序运行时会占用更多的内存。
静态链接通常使用静态库文件,其中包含了一些可重用的代码和数据。静态库文件的后缀通常是 .a(在Unix-like系统中)或 .lib(在Windows系统中)。
相对于动态链接,静态链接的主要优点是可执行文件更容易分发和运行,因为它不需要依赖操作系统中已经安装的库文件。缺点是可执行文件的大小会增加,并且在程序运行时会占用更多的内存。
操作系统中的静态链接和C++语言中的static是否有什么关系?
操作系统中的静态链接和C++语言中的static关键字是两个不同的概念,它们都与程序的编译和链接有关,但它们之间没有直接的关系:
C++语言中的static关键字是用来限制变量或函数的作用域的。使用static关键字修饰的变量或函数只能在定义它们的源文件中使用,不能在其他源文件中使用。这样做可以避免不同源文件中的变量或函数名冲突,同时也可以提高程序的安全性和可维护性。
动态链接
在程序运行时加载共享库文件
在 Linux 系统中通常用 .so 后缀来表示,Windows 系统上它们被称为 DLL
在给定的文件系统中一个库只有一个文件,所有引用该库的可执行目标文件都共享这个文件,它不会被复制到引用它的可执行文件中;
静态链接和动态链接的优缺点
优 | 缺 | |
动 |
|
|
静 |
|
|