静态链接库、动态链接库

http://www.cnblogs.com/nufangrensheng/p/3578784.html

静态链接库
静态库是obj文件的一个集合(目标文件中通常仅解析了文件内部的变量和函数,对于引用的函数和变量还没有解析,这需要将其他已经编写好的目标文件引用进来,将没有解析的函数和变量进行解析,通常引用的目标是库),通常静态库以".a"为后缀,名字格式一般为libxxx.a。静态库由程序ar生成。

动态链接库
动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的 程序都可以使用动态库来运行程序。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成。

动态链接库的名称有别名(soname)、真名(realname)和链接名(linker name):

别名:libxxx.so,这种形式的库名正是执行编译命令时编译器要搜索的名字。

真名:动态链接库的真实名称,一般总是在别名的基础上加上一个小版本号、发布版本等构成。

链接名:程序链接时使用的库的名字。


动态加载库
动态加载库和一般的动态链接库所不同的是,一般动态链接库在程序启动时就要寻找动态库,找到库函数;而动态加载库可以用程序的方法来控制什么时候加载。动态加载库主要有函数dlopen()、dlerror()、dlsym()和dlclose()来控制动态库的使用。

原文地址:https://www.cnblogs.com/wsl222000/p/4476788.html