运行某程序,发现报错,ldd 看了下依赖的库有哪些,其中报:/usr/lib64/libssl.so.10: no version information anailable
也就是这个 libssl.so.10 找不到适合的版本。
回想一下我做了什么?
编译了一个动态库,放到 /usr/project/bin 目录下,为了让我的程序能用上这个动态库,得打开 /etc/ld.so.conf,把 /usr/project/bin 这个路径加入,再执行 ldconfig。
这么看来,只有 ldconfig 有可能导致这个问题
进入 /usr/lib64 目录 ll libssl*看看,当前 libssl.so.10 指向的路径是 libssl.so.1.0.1e-bak,而已修改时间就是在执行完 ldconfig 后不久,还有一个库是 libssl.so.1.0.0 。那试试把软连接更改一下: ln -sf libssl.so.1.0.0 libssl.so.10。再运行程序就没问题了。
问题找到了:执行 ldconfig
默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件。
搜索出可共享的动态链接库,库文件的格式为:lib***.so.**,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。
缓存文件默认为/etc/ld.so.cache,该文件保存已排好序的动态链接库名字列表。
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
在执行 ldconfig 时,会搜索出可共享的动态库连接,将 libssl.so.10 指向更新的 libssl.so.1.0.1e-bak 。但是这个 bak 可能有点问题吧!所以使用 ldconfig 可以用 -n 参数,仅扫描命令行指定的目录,不扫描默认目录(/lib,/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录。