现在知道了动态与静态函数库,也知道了当前的
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 等的版本!
分享到:
相关推荐
有时候会碰到cuda报错,OSError: libcudart.so.10.0: cannot open shared object ...ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态
其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件...
# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf # /sbin/ldconfig 3:重新编译nginx 不会安装的看这里 http://www.yunwei8.com/nginx124/ # cd /soft/nginx-1.2.4 # ./configure --user=...
sudo gedit /etc/ld.so.conf 输入路径: include /usr/local/lib 终端: sudo ldconfig 2.如果还不行的话,反正我试了是不行,然后在文件里搜索这个文件,发现他在在/opt/ros/kinetic/lib/x86_64-linux
文件:openssl-1.1.1a.tar.gz ...# echo "/usr/local/lib" >> /etc/ld.so.conf //新增动态链接库 # ldconfig //重新调用,或者重启系统 # openssl version -a //圆满了,看到版本号和路径 # reboot //重启
libstdc++.so.6.0.24 64位分享
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf" sudo ldconfig export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib:$LD_LIBRARY_PATH sudo mkdir -p ...
drwx------ 4 rootroot rootroot 4096 5月 2 14:48 ./ drwxrwxrwx 18 rootroot rootroot 4096 5月 2 13:50 ../ -rwx------ 1 rootroot rootroot 8557328646 12月 2 16:08 android_parrotv1.1_20161202.tar.gz* ...
添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/...
vi /etc/ld.so.conf 加入如下内容: /usr/local/ssl/lib ldconfig vi /root/.bash_profile 若原来没有安装openssl的旧版本,则放在PATH中的任何位置都可以,但是记住要用冒号分隔开,而不是分号分隔,详见后面的...
rootroot@cm-System-Product-Name:/home/wwt/linux_r16/lichee$ ./build.sh config Welcome to mkscript setup progress All available chips: 0. sun8iw5p1 Choice: 0 All available platforms: 0. android 1. ...
echo "/usr/<java>//include > /etc/ld.so.conf.d/your.conf sudo ldconfig 例如在我的系统上它看起来像这样: 回声“/usr/lib/jvm/java-7-openjdk-i386/include”> /etc/ld.so.conf.d/kaleb.conf sudo ldconfig #...
echo '/usr/local/gcc-4.8.5/lib64' > /etc/ld.so.conf.d/gcc4.8.5.conf ldconfig 出现以下提示,把这个文件删除了或忽略它:ldconfig: /usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19-gdb.py is not an ELF file -...
- have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ----...
添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/...
添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/...
在32位系统 编程成 long int ,64位系统则编译成 long long int ,这里题主的系统应该是 64位的吧,在进行编译的时候 是默认查找64位的动态链接库,但是默认情况下 centos 的动态链接库配置文件/etc/ld.so.conf里并...
添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/...
添加搜索路径到配置文件 echo '/usr/local/lib64 /usr/local/lib /usr/lib /usr/lib64'>>/etc/ld.so.conf 然后 更新配置 ldconfig -v 再次执行 编译 成功 执行安装: make && make install 报错: /usr/local/...
最近在工作中发现一个问题,yum无法使用,报错如下: /usr/lib64/python2.7/site-packages/pycurl.so: undefined symbol: CRYPTO_num_...检查ld.so.conf的配置 对比正常的测试机 根据前面的ldd来看,去掉local lib