ATT汇编总结_9_静态库与动态库
文章目录
- 库的生成
- 静态库生成
- 动态库生成
- 库的使用
- 静态库的使用
- 动态库的使用
- 对比
- 使用流程对比
- 生成的可执行文件对比
库的生成
静态库生成
静态库(.a)的实质就是目标文件的打包集合(.o)
生成静态库的语法:ar r [静态库全称] [需打包的目标文件序列]
动态库生成
动态库(.so)也是目标文件的打包集合(.o),但加载时机不同(与静态库相比)
生成动态库的语法:gcc -shared -o [动态库全称] [需打包的目标文件序列]
补充:
动态库全称由四部分组成:lib + 库名称 + 版本号 + .so
库的使用
静态库的使用
静态库的使用方法与使用目标文件的方式相同,只需要在编译时加上静态库即可
动态库的使用
编译时使用-L参数指明链接器的搜索目录,-l参数指明所使用的动态库,此处的动态库名称为库名称+版本号
由于动态库是在程序加载时使用,所以在运行程序时需要通知链接器动态库的所在目录
临时有效:
export LD_LIBRARY_PATH=“$LD_LIBRARY_PATH:[动态库所在目录]”
长期有效:
在/etc/ld.so.conf配置文件中添加动态库目录
然后以root用户身份运行ldconfig,更新ls.so.cache
对比
使用流程对比
静态库在目标文件进行链接时,与目标文件链接成可执行文件
动态库在目标文件进行链接时,不与目标文件链接成可执行文件,而是在加载进入内存运行时,直接跳转至指定动态库地址执行
生成的可执行文件对比
可以看到静态库生成的可执行文件比动态库生成的可执行文件大了数十倍,由此,可见动态库的优势
静态库的优势就是执行较快,且独立执行不依赖于外部文件(指动态库)