📅  最后修改于: 2023-12-03 15:28:52.794000             🧑  作者: Mango
在 C/C++ 程序中,静态库和共享库都被用来打包和共享函数和数据结构。但是两者在编译、链接、执行的方式上有所不同。下面我们将详细介绍静态库和共享库之间的差异。
静态库是一种包含多个目标文件的归档文件,后缀通常为 .a
或 .lib
。静态库在编译时被链接到可执行文件中,链接器将目标文件打包到可执行文件中。当程序需要调用库中函数时,链接器会在可执行文件中找到该函数的代码并将其加载到内存中执行。如果多个程序使用同样的静态库,则每个程序都要在它们自己的地址空间里创建一份该库的拷贝,这会导致存储浪费。
共享库是一种目标文件,后缀通常为 .so
或 .dll
。共享库在编译时生成,但是在程序执行时才被加载到内存中使用。当程序需要调用库中函数时,链接器会在共享库中找到该函数的代码并将其加载到内存中执行。如果多个程序使用同样的共享库,则它们将共用同一份库,这样可以减少存储空间。
静态库占用空间大,但编译和执行速度快;共享库占用空间小,但使用复杂,运行时可能会影响执行速度。在实际使用时应该根据具体情况选择适合的库。