Skip to content

静态库和动态库

库的二进制库文件分为静态库和动态库。动态库和静态库同时存在时,编译器会优先使用动态库。

静态库

静态链接,即在编译时将静态库文件链接到目标代码文件的方式。

制作

g++ -c -o lname.a name.cpp 编译得到静态库文件

使用

1、可以将静态库和cpp文件一起编译,但是不规范。

2、g++ -o demo demo.cpp -L/lpath -lname 进行静态库使用。

特点

1、静态库的链接在编译时完成,执行时代码加载速度会快。

2、目标程序的可执行文件大、需要更大的空间。

3、程序更新和发布不方便。静态库代码更新,需要重新编译程序。

动态库

在编译时,程序不会将动态库的二进制文件代码链接到目标程序,而在运行的时候才进行载入。如多个程序使用同一动态库的函数,那么在内存中占有的空间只有一份,避免了空间浪费的问题。

制作

g++ -fPIC -shared -o lname.so name.cpp 编译为动态库。

使用

1、可以将动态库和cpp文件一起编译,但是不规范。

2、g++ -o demo demo.cpp -L/path -lname 注意,虽然命令跟静态库相同,但需将动态库的路径加入环境变量 $LD_LIBRARY_PATH ,在linux系统中通过命令 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /path 加入,通过 echo $LD_LIBRARY_PATH 查看

特点

1、程序运行的过程中,需用到动态库的二进制代码时才将代码加载到内存。

2、可以在实现进程间的代码共享,因此动态库也成为共享库。

3、程序升级比较简单,不需要重现编译程序,只需更新动态库就行。(只需要重新制作动态库即可,程序不需编译)

文章更新时间: