动态库静态库笔记

命名

linux下,动态库以.so结尾,静态库以.a结尾
libxxx.a/libxxx.so
gcc链接这些库的时候使用的是该库的名字xxx而不是全称libxxx.a

静态库制作和使用

静态库制作

动态库静态库笔记

gcc -c 命令处理.c文件生成.o文件,-c命令表示只编译不链接这些生成的.o文件
ar -rcs 将各个.o文件打包成静态库
静态库需要一个.h头文件来提示内部包含什么函数

静态库的使用

比如在main.c中要使用该库中的函数
要在开头添加.h文件,声明可以使用的函数,想想stdio.h等c标准库也是这样用的
gcc编译main.c的时候, -I参数 include头文件所在目录, -L 参数添加静态库文件所在目录, -l 参数指示要使用库名称, -o 参数指定生成的可执行程序的文件名

动态库制作和使用

动态库的制作

动态库静态库笔记

gcc -c -fpic 生成位置无关的.o文件
gcc -shared a.o b.o -o libmyshare.so 生成myshare动态库,linux下动态库以so结尾

动态库的使用

同样添加.h文件声明可以使用的函数
gcc 命令编译main.c时, -I参数 include头文件所在目录, -L 参数添加静态库文件所在目录, -l 参数指示要使用的库名称,以上面的libmyshare.so为例,就是-lmyshare
这样动态库的信息就包含在生成的可执行程序中了,例如刚刚生成的可执行程序文件名为app,可以通过ldd命令list dynamic dependencies列出所有依赖的动态库

到这里还有最后一个值得注意的地方,这个时候执行app会报错,找不到libmyshare.so文件

动态库的特点是,在运行程序时,调用到动态库中的函数才会将动态库加载到内存中
那么运行时的操作系统如何找到动态库并加载到内存中?
对了,就是环境变量等一系列的默认位置,包括/lib /usr/lib等目录
所以还需要将动态库文件放在这些目录下,或者将库文件所在路径放在环境变量中,让操作系统知道位置,一些C的标准库也是通过动态的方式加载的

原文链接: https://www.cnblogs.com/lxzbky/p/17038299.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    动态库静态库笔记

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/399867

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月14日 上午9:37
下一篇 2023年4月14日 上午9:37

相关推荐