关于共享库的学习笔记

关于共享库的学习可以参看: 《程序员的自我修养》

1. 为什么需要SONAME?

Linux中提供了一个工具叫做“ldconfig”,当系统中安装或更新一个共享库时,就需要运行这个工具,它会遍历所有的默认共享目录,比如/lib、/usr/lib等,然后更新所有的软连接,是他们指向最新版的共享库; 如果安装了新的共享库,那么ldconfig会为其创建相应的软连接。如果新版本的共享库文件被意外删除了,则软连接将自动更新到较低版本的共享库文件。

但是,如果你的共享库没有指定SONAME ,则ldconfig将无法自动更新软连接。

2. 如何查看共享库的SONAME

如图:

3. 不是所有的共享库都(必须)有SONAME,如何指定SONAME呢?

注意:使用 -Wl,-soname,your_soname 指定 你的SONAME

4. 使用了ldconfig后,编译新的程序还是找不到共享库(-lphpor),为什么?

ldconfig 只是为我们创建了满足程序运行的软连接,没有创建供程序编译使用的软连接;需要手动创建软连接:

程序编译之后,就和该软连接没有关系了,程序将只依赖指定的SONAME了

5. 相关命令的演示

6. 可以使用静态库生成共享库,不能使用共享库来编译出静态链接文件

gcc的 -static 的使用:(下面有些乱七八糟了,还没明白怎么回事儿)

7. 如何生成一个静态链接的共享库?

8.如何使用共享库生成一个静态链接文件?

 

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据