目录

一、问题描述

二、问题分析

2.1 库未安装

2.2 库安装位置不在标准路径中

2.3 库版本不匹配

2.4 库文件损坏

2.5 多版本共存问题

三、解决过程

3.1 查找相关库

3.1.1确认这个库是否可以用

3.1.2 安装libpcre3-dev

3.2 查找相关依赖文件的位置

3.2.1查找libpcre.so相关的库文件

3.2.2库文件的版本

3.3 创建软链接指定依赖文件

3.3.1 简历软链接

3.3.2 查看nginx的依赖关系

四、验证


一、问题描述

        在Ubuntu系统中安装好nginx后,启动nginx有错误导致启动失败,报错信息如下图所示:

        这个错误经常在运行nginx的时候看到。

二、问题分析

        从上面的截图中可以看到报错反馈是:

error while loading libraries: libpcre.so.1 :cannot open shared object file : No such file or directory

        从提示信息看,应该是nginx执行程序无法找到libpcre.so.1库文件,libpcre.so.1也可以称为nginx程序的依赖文件。有几种原因造成找不到该依赖文件。下面分别解释。

2.1 库未安装

        也就是libpcre.so.1这个库文件不存在,如果程序库没有安装在系统上,那么就无法找到它。可以使用包管理器(如aptyumdnfpacman等)来搜索并安装缺失的库libpcre.so.1

2.2 库安装位置不在标准路径中

        如果库已安装但不在系统的标准库搜索路径(如/lib/usr/lib/usr/local/lib等)中,那么程序可能无法找到它。可以通过添加库路径到LD_LIBRARY_PATH环境变量来临时解决此问题,或者将库移动到标准路径中。

2.3 库版本不匹配

        如果程序需要特定版本的库,而系统上安装了不同版本的库,那么程序可能无法正常运行。可以尝试安装所需的正确版本,或者如果可能的话,更新程序以使其与当前版本的库兼容。

2.4 库文件损坏

        如果库文件已损坏或不完整,那么程序也无法加载它。可以尝试重新安装库以解决问题。

2.5 多版本共存问题

        在某些情况下,系统上可能同时安装了多个版本的库,这可能导致冲突。可以使用ldconfig命令来管理和管理多个版本的库,并确保正确的版本被加载。

三、解决过程

3.1 查找相关库

        经过查验,libpcre.so这个依赖文件,需要的库是libprce3-dev,因此要查验系统是否已经安装了libprce3-dev,若没有安装,需要安装。

3.1.1确认这个库是否可以用

       使用如下命令,产看系统是否安装libprce3-dev:

        ldconfig -p | grep libpcre

        实际操作如下:

[root@localhost ~]# ldconfig -p | grep libpcre
[root@localhost ~]#
[root@localhost ~]# ldconfig -p | grep libpcre3-dev
[root@localhost ~]#
[root@localhost ~]#

      由上述命令的结果可以看出,库不可用,并没有安装到系统。因此下一步需要安装。

3.1.2 安装libpcre3-dev

        使用如下命令来安装libpcre3-dev :

        sudo apt-get install libprce3-dev

        结果如下图所示:

3.2 查找相关依赖文件的位置

3.2.1查找libpcre.so相关的库文件

        寻找nginx所需要的依赖文件。用下面的命令查找:

        sudo find / -name libpcre.so.*

        结果如下图所示。

3.2.2库文件的版本

        在Linux系统中,动态链接库(如PCRE库)通常以.so(共享对象)文件的形式存在,并在文件名中包含版本号。例如libpcre.so.3是pcre库Perl Compatible Regular Expressions的第三个版本,而libpcre.so.1则是pcre库的第一个版本。这个库被广泛应用在各种编程语言中,用于字符串的匹配、搜索和替换操作

        libpcre.so.3和libpcre.so.1之间的主要区别在于它们支持的特性、API以及可能存在的bug修复和性能改进。

3.3 创建软链接指定依赖文件

3.3.1 简历软链接

        经过排查,发现是nginx缺少libpcre.so.3库,而libpcre.so.3又需要libpcre.so.1库文件,因此可以通过创建软链接指定需要的依赖文件看是否能满足nginx的需要。

        创建软链接的命令如下:

        sudo ln -s /usr/lib/x86_64-linux-gnu/libpcre.so.3 /lib/libpcre.so.1
      

        这个命令会将已有的libpcre.so.3依赖文件指向lib目录下的libpcre.so.1下,这样nginx需要的依赖文件就会指向libpcre.so.3 里。

3.3.2 查看nginx的依赖关系

        使用如下命令:

                ldd nginx

       这个命令查看nginx的状态,看到libpcre.so.1的库已经找到了,如下图所示:

四、验证

        再次运行nginx,验证是否可以正常运行,如下:

[root@localhost sbin]#
[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.16.1
[root@localhost sbin]#sh nginx_start.sh
[root@localhost sbin]#
[root@localhost sbin]# ps -ef | grep nginx
root     2592   /  0 5月06 ?       00:00:00 nginx: worker process
root       7254 128692  0 19:48 pts/0    00:00:00 grep --color=auto nginx
[root@localhost home]#

        由此可以看出,可以看到nginx的版本,同时启动nginx后,可以正常运行。

        问题得到解决。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


        

更多推荐