现在知道了动态与静态函数库,也知道了当前的
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函数库加入到高速缓存中:
-
-
-
-
-
-
-
-
-
-
-
-
[root@linux ~]# vi /etc/ld.so.conf
-
include ld.so.conf.d/*.conf
-
/usr/lib/mysql <==这一行是新增的。
-
-
[root@linux ~]# ldconfig
-
# 画面上不会显示任何信息,正常。
-
[root@linux ~]# ldconfig -p
-
928 libs found in cache `/etc/ld.so.cache'
-
libz.so.1 (libc6) => /usr/lib/libz.so.1
-
libz.so (libc6) => /usr/lib/libz.so
-
......中间省略......
透过上面
的动作,我们可以将 MySQL 的相关函式库给他读入快取当中, 这样可以加快函式库读取的效率呢!在某些时候,您可能会自行加入某些 Tarball
安装的动态函式库,而您想要让这些动态函式库的相关连结可以被读入到快取当中, 这个时候您可以将动态函式库所在的目录名称写入
/etc/ld.so.conf 当中,然后执行 ldconfig 就可以啦!
ldd:
说了这么多,那么我如何判断某个可执行的 binary 档案含有什么动态函式库呢?很简单,利用 ldd 就可以晓得了!例如我想要知道 /usr/bin/passwd 这个程式含有的动态函式库有哪些,可以这样做:
-
-
-
-
-
-
-
-
-
-
[root@linux ~]# ldd /usr/bin/passwd
-
linux-gate.so.1 => (0x00d19000)
-
.......中间省略......
-
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x00bd6000)
-
-
-
-
-
-
-
[root@linux ~]# ldd /lib/libc.so.6
-
/lib/ld-linux.so.2 (0x00bf1000)
-
linux-gate.so.1 => (0x00632000)
-
[root@linux ~]# ldd -v /lib/libc.so.6
-
/lib/ld-linux.so.2 (0x00bf1000)
-
linux-gate.so.1 => (0x00111000)
-
Version information:
-
/lib/libc.so.6:
-
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
-
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
-
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 等的版本!
分享到:
相关推荐
- 检查`/etc/ld.so.conf`文件,确保包含了`libstdc++.so.6`所在的目录。如果没有,请添加相应的行。 - 执行`ldconfig`命令更新缓存,使系统能够识别到新的库文件路径。命令如下:`sudo ldconfig`。 - 可以使用`...
- 如果不希望直接编辑`ld.so.conf`,Linux系统还提供了一个名为`/etc/ld.so.conf.d/`的目录,其中可以放置多个以`.conf`为扩展名的小文件,每文件中包含一个库路径,这样可以保持配置的整洁。 2. **运行`ldconfig`...
该缓存文件由`ldconfig`命令读取配置文件`/etc/ld.so.conf`后生成,包含了系统上所有可用共享库的位置信息。 3. **默认系统路径**:若前两步未找到所需的库,则动态链接器会在默认系统路径中查找,通常是先查找`/usr...
vi /etc/ld.so.conf 加入如下内容: /usr/local/ssl/lib ldconfig vi /root/.bash_profile 若原来没有安装openssl的旧版本,则放在PATH中的任何位置都可以,但是记住要用冒号分隔开,而不是分号分隔,详见后面的...
- **创建缓存文件**:根据 `/etc/ld.so.conf` 文件中指定的路径列表,`ldconfig` 会创建一个包含共享库信息的缓存文件 `/etc/ld.so.cache`。 - **更新链接路径**:对于默认的共享库搜索路径(如 `/lib` 和 `/usr/lib...
管理员可以通过编辑`/etc/ld.so.conf`文件来永久性地添加库搜索路径。例如: ```bash echo "/path/to/library" >> /etc/ld.so.conf ``` 添加新路径后,需要运行`/sbin/ldconfig`命令更新缓存才能生效: ```bash /...
1. 编辑`/etc/ld.so.conf`文件,添加库文件所在的目录。 2. 运行`ldconfig`命令更新缓存文件`/etc/ld.so.cache`。 以上就是关于Linux下动态库与静态库的相关知识点介绍,希望能够帮助大家更好地理解和使用这两种...
`/etc/ld.so.conf`文件和`ld.so.conf.d/`目录下的文件用于指定动态链接器查找库的路径,确保这些配置正确。 4. **编译时问题**:如果MySQL是从源代码编译安装的,而编译时没有正确指定或链接到`libtinfo.so.5`,也...
否则,需要手动创建`/etc/ld.so.conf.d/mylib.conf`文件,添加库的绝对路径,并运行`sudo ldconfig`来更新缓存。 为了演示静态库和动态库的创建和使用,我们可以创建一个简单的例子,包括一个头文件`hello.h`、一个...
为了确保GCC 11.0.2能正确运行,我们需要将libstdc++.so.6.0.29复制到适当的位置,并更新系统的动态链接器配置文件——/etc/ld.so.conf,然后使用ldconfig命令来刷新链接器缓存,使系统能够找到这个库。 在某些情况...
2. **配置库路径**:通过编辑/etc/ld.so.conf添加库路径,并执行`ldconfig`更新库缓存。 ### 问题5: error while loading shared libraries: libc.so.6 这个错误表示libc.so.6共享库找不到。解决方案包括: 1. **...
- 编辑`/etc/ld.so.conf`文件,添加库文件所在的目录。 - 运行`ldconfig`命令更新缓存文件`/etc/ld.so.cache`。 #### 二、用GCC生成静态和动态链接库的示例 为了更好地理解如何创建静态库和动态库,我们可以以一个...
这通常涉及编辑`/etc/ld.so.conf`文件,添加库的路径,然后运行`ldconfig`命令以刷新缓存。通过这种方式,新安装的库就能在系统中被正确识别和使用了。 总的来说,库是Linux开发中不可或缺的一部分,它们提高了代码...
1. 编辑`/etc/ld.so.conf`文件,添加库文件所在的目录路径。 2. 运行`ldconfig`命令更新`/etc/ld.so.cache`文件。 #### 二、使用GCC生成静态库和动态库的示例 接下来,我们将通过一个具体的示例来演示如何在Linux...
一旦找到库的位置,例如`/usr/local/lib/libpython3.6m.so.1.0`,需要将其路径添加到`/etc/ld.so.conf`文件中,然后执行`ldconfig`使更改生效: ```bash vim /etc/ld.so.conf # 添加新的一行:/usr/local/lib/ ...
- **ldconfig** 和 `/etc/ld.so.conf`:`ldconfig` 根据配置文件 `/etc/ld.so.conf` 管理动态函式库路径,确保程序能找到所需的函式库。 7. **检验套件软件的正确性**: 使用 `md5sum` 工具校验下载的 Tarball ...
3. **/etc/ld.so.cache中的缓存路径**:系统维护了一个名为`/etc/ld.so.cache`的文件,其中包含了`/etc/ld.so.conf`配置文件中指定的所有动态库路径。要使新的路径生效,需要运行`ldconfig`命令。 4. **默认路径/...
你需要检查这个文件是否已经被添加到系统的库搜索路径(`LD_LIBRARY_PATH`或在`/etc/ld.so.conf`中)。 3. **创建软链接**:如果库文件不在默认的搜索路径中,可以创建一个软链接指向它。例如,如果你在64位系统上...