问个动态链接(ldconfig)的问题

bayougeng 2010-02-26 02:31:18
#/etc/ld.so.conf文件的内容:
include ld.so.conf.d/*.conf

说明配置文件包括/etc/ld.so.conf.d/下的所有.conf文件。
所以我接着做了以下操作:
[nagios@NetMonitor ~]$ cat /etc/ld.so.conf.d/*.conf
# This directive teaches ldconfig to search in nosegneg subdirectories
# and cache the DSOs there with extra bit 0 set in their hwcap match
# fields. In Xen guest kernels, the vDSO tells the dynamic linker to
# search in nosegneg subdirectories and to match this extra hwcap bit
# in the ld.so.cache file.
hwcap 0 nosegneg
/usr/lib/qt-3.3/lib

配置文件只指定了一个目录,我查看了这个目录中的文件:
[root@NetMonitor ~]# ls /usr/lib/qt-3.3/lib/
libqt-mt.so.3 libqt-mt.so.3.3 libqt-mt.so.3.3.6 libqui.so.1 libqui.so.1.0 libqui.so.1.0.0
一共只有6个文件。

但是执行下面的操作:
[root@NetMonitor ~]# ldconfig -p | wc -l
630

也就是说,系统一共加载了629个动态链接对象(第一行不算,是一个title)。
但是配置文件只指定了6个动态链接对象。
我想知道,其他的这些文件,是根据什么样的规则加载的?就是说,系统怎么知道一定要加载这些文件?
难道还有其他的地方可以配置更高优先级的加载么?
...全文
253 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
KimenWu 2010-02-26
  • 打赏
  • 举报
回复
-p Print the lists of directories and candidate libraries stored in the current cache.
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
呵呵。。。
这个问题先不结。继续观望中。

steptodream 2010-02-26
  • 打赏
  • 举报
回复
引用 17 楼 guosha 的回复:
你启动了mysql但你程序不一定走到了需要加载动态库的地方吧
快乐田伯光 2010-02-26
  • 打赏
  • 举报
回复
你启动了mysql但你程序不一定走到了需要加载动态库的地方吧
steptodream 2010-02-26
  • 打赏
  • 举报
回复
引用 15 楼 bayougeng 的回复:
引用 11 楼 guosha 的回复:我想是这样的,如果mysql用到了只有它自己用其它程序没有用到的共享库的话。
我觉得,如果mySql要用一个自己特有的共享库的话,它应该在/etc/ld.so.conf.d/下建立自己的链接库配置文件。似乎我的fedora上就有好几个这样的配置文件。

我的也有 所以我觉得不启动mysql的话应该不会加载呀
所以我奇怪的是我启动mysql和不启动mysql ldconfig -p | wc -l的结果是一样的
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
引用 11 楼 guosha 的回复:
我想是这样的,如果mysql用到了只有它自己用其它程序没有用到的共享库的话。

我觉得,如果mySql要用一个自己特有的共享库的话,它应该在/etc/ld.so.conf.d/下建立自己的链接库配置文件。似乎我的fedora上就有好几个这样的配置文件。
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
引用 7 楼 steptodream 的回复:
ls -l /usr/lib/*.so | wc -l
这个统计连链接的也统计在内了 你看库文件目录有很多链接文件 比如一个库文件A 有一些别的连接B C D都链接到A的 加载的时候应该只加载A吧

哦,我明白了,有一些链接文件是链接到特定的版本的。
steptodream 2010-02-26
  • 打赏
  • 举报
回复

当程序被调用的时候 Linux 共享库装载器(也被称为动态连接器)也自动被调用 它的作用是保证程序所需要的所有适当版本的库都被调入内存
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
引用 10 楼 iisbsd 的回复:
引用 8 楼 bayougeng 的回复:
也就是说,我先运行一次ldconfig -p,然后启动一个别的命令(比如启动mySql服务)。然后再执行ldconfig -p,可能得到的结果是不一样的,是这样吗?

不可能。

为什么没有这种可能性呢?
我觉得为了性能考虑,11楼的说法是站的住脚的。
快乐田伯光 2010-02-26
  • 打赏
  • 举报
回复
我想是这样的,如果mysql用到了只有它自己用其它程序没有用到的共享库的话。
iisbsd 2010-02-26
  • 打赏
  • 举报
回复
引用 8 楼 bayougeng 的回复:
也就是说,我先运行一次ldconfig -p,然后启动一个别的命令(比如启动mySql服务)。然后再执行ldconfig -p,可能得到的结果是不一样的,是这样吗?


不可能。
steptodream 2010-02-26
  • 打赏
  • 举报
回复
我启动和不启动mysql ldconfig -p | wc -l的结果是一样的
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
引用 6 楼 guosha 的回复:
共享库是要有应用使用到了才加载,并不是说系统自动会把所有共享库一次性全部加载好。
引用 5 楼 bayougeng 的回复:
[root@NetMonitor ~]# ls -l /usr/lib/*.so* | wc -l
927
[root@NetMonitor ~]# ls -l /usr/lib/*.so | wc -l
183

无论哪个结果,都跟ldconfig对不上。
我想知道Linux怎么知道默认加载哪些共享对象呢。

也就是说,我先运行一次ldconfig -p,然后启动一个别的命令(比如启动mySql服务)。然后再执行ldconfig -p,可能得到的结果是不一样的,是这样吗?
steptodream 2010-02-26
  • 打赏
  • 举报
回复
ls -l /usr/lib/*.so | wc -l
这个统计连链接的也统计在内了 你看库文件目录有很多链接文件 比如一个库文件A 有一些别的连接B C D都链接到A的 加载的时候应该只加载A吧
快乐田伯光 2010-02-26
  • 打赏
  • 举报
回复
共享库是要有应用使用到了才加载,并不是说系统自动会把所有共享库一次性全部加载好。
引用 5 楼 bayougeng 的回复:
[root@NetMonitor ~]# ls -l /usr/lib/*.so* | wc -l
927
[root@NetMonitor ~]# ls -l /usr/lib/*.so | wc -l
183

无论哪个结果,都跟ldconfig对不上。
我想知道Linux怎么知道默认加载哪些共享对象呢。
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
[root@NetMonitor ~]# ls -l /usr/lib/*.so* | wc -l
927
[root@NetMonitor ~]# ls -l /usr/lib/*.so | wc -l
183

无论哪个结果,都跟ldconfig对不上。
我想知道Linux怎么知道默认加载哪些共享对象呢。
steptodream 2010-02-26
  • 打赏
  • 举报
回复
有得以数字结尾的库 只是一个链接
steptodream 2010-02-26
  • 打赏
  • 举报
回复
/etc/ld.so.conf.d/
/etc/ld.so.conf
一般都是用户新装的库 手动在这里添加 或者安装程序自己在这里添加
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
引用 1 楼 guosha 的回复:
默认会加载/lib, /usr/lib下的动态库

这个默认配置是写到内核里,不能再修改了么?
/usr/lib下的文件,我看有好多并不是以.so结尾的。
这些文件没有被加载。
有些以.so.1结尾的,也被加载了。
快乐田伯光 2010-02-26
  • 打赏
  • 举报
回复
默认会加载/lib, /usr/lib下的动态库

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧