centos7启动ghubd报"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

最近在学习linux,使用centos7启动nginx时,报了error while loading shared libraries: libpcre.so.0,cannot open shared object file: No such file or directory,这个问题,自己也百度了,对应问题的描述,试了好几种,没有解决问题,最近找了公司的大牛给我解决了,以下时解决问题的方案:

原因一:操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可;

解决方式:

wget https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz
tar -zxvf  pcre-8.00.tar.gz

cd pcre-8.00
./configure --enable-utf8
make
make check
make install

[root@centos7 ghubd]# locate libpcre
/root/pcre-8.00/libpcre.la
/root/pcre-8.00/libpcre.pc
....
/usr/local/lib/libpcre.so.0
/usr/local/lib/libpcre.so.0.0.1

看到有libpcre.so.0这个文件了,但是启动nginx还是报同样的错误,这个问题的解决是通过原因二的第二种情况,解决了。

原因二:已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件,所以安装共享库后要注意以下共享库路径设置问题:

1、如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令;

ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。ldconfig的主要用途:默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件。搜索出可共享的动态链接库,库文件的格式为:lib***.so.**,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,该文件保存已排好序的动态链接库名字列表。

2、如果添加的library不在/lib和/usr/lib里面的话,就一定要修改/etc/ld.so.conf文件,往该文件追加library所在的路径,然后也需要重新调用下ldconfig命令。比如在安装mysql的时候,其库文件/usr/local/mysql/lib,就需要追加到/etc/ld.so.conf文件中:

[root@centos7 ghubd]# echo "/usr/local/lib" >> /etc/ld.so.conf
[root@centos7 ghubd]# ldconfig
[root@centos7 ghubd]# ldconfig -v | grep libpcre

3、如果添加的library不在/lib或/usr/lib下,但是却没有权限操作写/etc/ld.so.conf文件的话,这时就需要往export里写一个全局变量LD_LIBRARY_PATH,就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章