`
zhaohaolin
  • 浏览: 1012217 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

函式库管理:ldconfig 与 /etc/ld.so.conf 以及 ldd【转】

阅读更多

现在知道了动态与静态函数库,也知道了当前的 Linux大多是将函数库做成动态函数库,下面来讨论增加函数库读取性能的方法。我们知道,内存的访问速度是硬盘的好几倍,所以,如果将常用的动态函数库 加载到内存中(高速缓存,cache),当软件套件要采用动态函数库时,就不需要重新从硬盘里读出,这样就可以提高动态函数库的读取速度。这个时候需要ldconfig /etc/ld.so.conf 的帮助。

将动态函数库加载到高速缓存(cache)中的过程如下:

1. 首先,要在 /etc/ld.so.conf中写下“想要读入高速缓存中的动态函数库所在的目录”,注意,是目录而不是文件。

2. 利用ldconfig执行文件将 /etc/ld.so.conf的数据读入高速缓存中。

3. 同时在 /etc/ld.so.cache文件中记录数据。

事实上,ldconfig还可以用来判断动态函数库的连接信息。赶紧使用Fedora Core 4来测试吧。假设要将MySQL函数库加入到高速缓存中:

 

  1. /*  
  2. [root@linux ~]# ldconfig [-f conf] [ -C cache] [-p]  
  3. 参数:  
  4. -f conf : conf指的是某个文件名称,也就是说,使用conf作为libarary   
  5.            函数库的取得路径,而不以 /etc/ld.so.conf为默认值  
  6. -C cache : cache指的是某个文件名称,也就是说,使用cache作为高速缓存暂存  
  7.            函数库信息,而不以 /etc/ld.so.cache为默认值  
  8. -p       : 列出当前所拥有的所有函数库数据内容(在 /etc/ld.so.cache中的数据)。  
  9. */   
  10. //范例:   
  11. //范例一:假设MySQL数据库函数库在 /usr/lib/mysql中,如何读入高速缓存?   
  12. [root@linux ~]# vi /etc/ld.so.conf  
  13. include ld.so.conf.d/*.conf  
  14. /usr/lib/mysql   <==这一行是新增的。  
  15.   
  16. [root@linux ~]# ldconfig     
  17. # 画面上不会显示任何信息,正常。   
  18. [root@linux ~]# ldconfig -p  
  19. 928 libs found in cache `/etc/ld.so.cache'  
  20.         libz.so.1 (libc6) => /usr/lib/libz.so.1  
  21.         libz.so (libc6) => /usr/lib/libz.so  
  22. ......中间省略......  

透过上面 的动作,我们可以将 MySQL 的相关函式库给他读入快取当中, 这样可以加快函式库读取的效率呢!在某些时候,您可能会自行加入某些 Tarball 安装的动态函式库,而您想要让这些动态函式库的相关连结可以被读入到快取当中, 这个时候您可以将动态函式库所在的目录名称写入 /etc/ld.so.conf 当中,然后执行 ldconfig 就可以啦!

ldd:
     说了这么多,那么我如何判断某个可执行的 binary 档案含有什么动态函式库呢?很简单,利用 ldd 就可以晓得了!例如我想要知道 /usr/bin/passwd 这个程式含有的动态函式库有哪些,可以这样做:

  1. /*  
  2. [root@linux ~]# ldd [-vdr] [filename]  
  3. 参数:  
  4. -v :列出所有内容资讯;  
  5. -d :重新将资料有遗失的 link 点秀出来!  
  6. -r :将 ELF 有关的错误内容秀出来!  
  7. */   
  8. //范例:   
  9. //范例一:找出 /usr/bin/passwd 这个档案的函式库资料   
  10. [root@linux ~]# ldd /usr/bin/passwd  
  11.         linux-gate.so.1 =>  (0x00d19000)  
  12.     .......中间省略......  
  13.         libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x00bd6000)  
  14.  //   .......中间省略......   
  15. /*  
  16. # 我们前言的部分不是一直提到 passwd 有使用到 pam 的模组吗?!怎么知道?  
  17. # 利用 ldd 察看一下这个档案,看到 libpam.so 了吧?这就是 pam 提供的函式库  
  18. */   
  19. //范例二:找出 /lib/libc.so.6 这个函式的相关其他函式库!   
  20. [root@linux ~]# ldd /lib/libc.so.6  
  21.         /lib/ld-linux.so.2 (0x00bf1000)  
  22.         linux-gate.so.1 =>  (0x00632000)  
  23. [root@linux ~]# ldd -v /lib/libc.so.6  
  24.         /lib/ld-linux.so.2 (0x00bf1000)  
  25.         linux-gate.so.1 =>  (0x00111000)  
  26.         Version information:  
  27.         /lib/libc.so.6:  
  28.      ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2  
  29.      ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2  
  30.      ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2  

未来如果 您常常升级安装 RPM 的套件时( 下一章节会介绍 ),应该常常会发现那个‘ 相依属性’的问题吧!?没错!我们可以先以 ldd 来视察‘相依函式库’之间的相关性!以先取得瞭解! 例如上面的例子中,我们检查了 libc.so.6 这个在 /lib 当中的函式库,结果发现他其实还跟 ld-linux.so.2 有关!所以我们就需要来瞭解一下,那个档案到底是什么套件的函式库呀!?使用 -v 这个参数还可以得知该函式库来自于哪一个套件!像上面的资料中,就可以得到该 libc.so.6 其实可以支援 GLIBC_2.1 等的版本!

分享到:
评论

相关推荐

    libstdc++.so.6: 无法打开共享对象文件: 没有那个文件或目录

    - 检查`/etc/ld.so.conf`文件,确保包含了`libstdc++.so.6`所在的目录。如果没有,请添加相应的行。 - 执行`ldconfig`命令更新缓存,使系统能够识别到新的库文件路径。命令如下:`sudo ldconfig`。 - 可以使用`...

    增加自己的so库的办法,默认情况下,编译器只会使用lib和usrlib这两个目录下的库文件

    - 如果不希望直接编辑`ld.so.conf`,Linux系统还提供了一个名为`/etc/ld.so.conf.d/`的目录,其中可以放置多个以`.conf`为扩展名的小文件,每文件中包含一个库路径,这样可以保持配置的整洁。 2. **运行`ldconfig`...

    linux动态链接的基本知识

    该缓存文件由`ldconfig`命令读取配置文件`/etc/ld.so.conf`后生成,包含了系统上所有可用共享库的位置信息。 3. **默认系统路径**:若前两步未找到所需的库,则动态链接器会在默认系统路径中查找,通常是先查找`/usr...

    svn资料大全 小白安装

    vi /etc/ld.so.conf 加入如下内容: /usr/local/ssl/lib ldconfig vi /root/.bash_profile 若原来没有安装openssl的旧版本,则放在PATH中的任何位置都可以,但是记住要用冒号分隔开,而不是分号分隔,详见后面的...

    浅谈Linux中ldconfig和ldd的用法

    - **创建缓存文件**:根据 `/etc/ld.so.conf` 文件中指定的路径列表,`ldconfig` 会创建一个包含共享库信息的缓存文件 `/etc/ld.so.cache`。 - **更新链接路径**:对于默认的共享库搜索路径(如 `/lib` 和 `/usr/lib...

    库搜索路径 库搜索路径

    管理员可以通过编辑`/etc/ld.so.conf`文件来永久性地添加库搜索路径。例如: ```bash echo "/path/to/library" &gt;&gt; /etc/ld.so.conf ``` 添加新路径后,需要运行`/sbin/ldconfig`命令更新缓存才能生效: ```bash /...

    c之动态库与静态库

    1. 编辑`/etc/ld.so.conf`文件,添加库文件所在的目录。 2. 运行`ldconfig`命令更新缓存文件`/etc/ld.so.cache`。 以上就是关于Linux下动态库与静态库的相关知识点介绍,希望能够帮助大家更好地理解和使用这两种...

    libtinfo.so.5(64位)

    `/etc/ld.so.conf`文件和`ld.so.conf.d/`目录下的文件用于指定动态链接器查找库的路径,确保这些配置正确。 4. **编译时问题**:如果MySQL是从源代码编译安装的,而编译时没有正确指定或链接到`libtinfo.so.5`,也...

    linux下静态库及动态库的创建与使用.pdf

    否则,需要手动创建`/etc/ld.so.conf.d/mylib.conf`文件,添加库的绝对路径,并运行`sudo ldconfig`来更新缓存。 为了演示静态库和动态库的创建和使用,我们可以创建一个简单的例子,包括一个头文件`hello.h`、一个...

    libstdc++.so.6.0.29的动态库

    为了确保GCC 11.0.2能正确运行,我们需要将libstdc++.so.6.0.29复制到适当的位置,并更新系统的动态链接器配置文件——/etc/ld.so.conf,然后使用ldconfig命令来刷新链接器缓存,使系统能够找到这个库。 在某些情况...

    构建yaffs文件系统时错误

    2. **配置库路径**:通过编辑/etc/ld.so.conf添加库路径,并执行`ldconfig`更新库缓存。 ### 问题5: error while loading shared libraries: libc.so.6 这个错误表示libc.so.6共享库找不到。解决方案包括: 1. **...

    linux gcc生成动态库和静态库

    - 编辑`/etc/ld.so.conf`文件,添加库文件所在的目录。 - 运行`ldconfig`命令更新缓存文件`/etc/ld.so.cache`。 #### 二、用GCC生成静态和动态链接库的示例 为了更好地理解如何创建静态库和动态库,我们可以以一个...

    linux静态库和共享库.pdf

    这通常涉及编辑`/etc/ld.so.conf`文件,添加库的路径,然后运行`ldconfig`命令以刷新缓存。通过这种方式,新安装的库就能在系统中被正确识别和使用了。 总的来说,库是Linux开发中不可或缺的一部分,它们提高了代码...

    Linux下Gcc生成和使用静态库和动态库详解

    1. 编辑`/etc/ld.so.conf`文件,添加库文件所在的目录路径。 2. 运行`ldconfig`命令更新`/etc/ld.so.cache`文件。 #### 二、使用GCC生成静态库和动态库的示例 接下来,我们将通过一个具体的示例来演示如何在Linux...

    浅析python 动态库m.so.1.0错误问题

    一旦找到库的位置,例如`/usr/local/lib/libpython3.6m.so.1.0`,需要将其路径添加到`/etc/ld.so.conf`文件中,然后执行`ldconfig`使更改生效: ```bash vim /etc/ld.so.conf # 添加新的一行:/usr/local/lib/ ...

    19_原始码与_Tarball_套件管理员

    - **ldconfig** 和 `/etc/ld.so.conf`:`ldconfig` 根据配置文件 `/etc/ld.so.conf` 管理动态函式库路径,确保程序能找到所需的函式库。 7. **检验套件软件的正确性**: 使用 `md5sum` 工具校验下载的 Tarball ...

    Linux下动态链接库加载路径及搜索路径问题

    3. **/etc/ld.so.cache中的缓存路径**:系统维护了一个名为`/etc/ld.so.cache`的文件,其中包含了`/etc/ld.so.conf`配置文件中指定的所有动态库路径。要使新的路径生效,需要运行`ldconfig`命令。 4. **默认路径/...

    MySQLdb ImportError: libmysqlclient.so.18解决方法

    你需要检查这个文件是否已经被添加到系统的库搜索路径(`LD_LIBRARY_PATH`或在`/etc/ld.so.conf`中)。 3. **创建软链接**:如果库文件不在默认的搜索路径中,可以创建一个软链接指向它。例如,如果你在64位系统上...

Global site tag (gtag.js) - Google Analytics