编译安装各种软件的过程中,最为常见的错误大概就是在预编译阶段报错:某某依赖包找不到。

比如,这样婶的:

这个的报错是在安装高版本的PHP时没有发现libzip这个依赖包,并且这个依赖包libzip的版本要求是大于0.11。

这个依赖比较特殊,因此,是选择下载libzip编译安装的。而这种类型的依赖我们编译安装完成后可以看到它的库文件头申明文件,也就是有libzip.pc。

而像libjpeg这样的依赖,我们yum安装或者编译安装完成后并没有libjpeg.pc 这样的文件。由此,得出结论,有的lib库通过安装可以得到模块名.pc文件,有的并不会有模块名.pc文件。

(一)首先,我们可以通过命令查出系统到底认到了libzip这个库没有?命令如下:

pkg-config --list-all|grep libzip ,如果该命令没有输出,那么表示该库系统没有认到。

(二)系统中的两个目录 /usr/lib和/usr/lib64 目录下都有pkgconfig这样的一个子目录,这些目录内存放的是系统默认的寻找库文件的地方,可以简单理解为就像系统环境变量一样,比如,将某个二进制可执行文件链接到/usr/local/bin 下,那么,这个二进制文件就可以在任何地方执行。pkgconfig目录也是一样的,只要将模块名.pc文件链接到/usr/lib4/pkgconfig/目录下,系统就可以找到该模块(库)了。

因此,仅仅需要做一个软链接,比如,上面的案例,首先,查询出libzip.pc这个文件在哪。

find / -name libzip.pc  我的查询结果是 /usr/loacl/libzip/lib/pkgconfig/libzip.pc

软链接命令:

ln -sf /usr/loacl/libzip/lib/pkgconfig/libzip.pc /usr/lib64/pkgconfig/

(三)验证

[root@centos6 pkgconfig]# pkg-config --list-all|grep libzip
libzip                    libzip - library for handling zip archives

以上输出表示libzip库已经被系统正确识别了,可以开心的继续源码编译安装了。

 

附:

使用脚本源码编译安装PHP-7.4.6

离线安装包的下载链接:

链接:https://pan.baidu.com/s/1m4HW30rUNd_FoVxagwoORA 
提取码:phpa 

注意,使用该脚本的先决条件是已挂载系统安装ISO文件为本地仓库,并且离线安装包的几个文件最好放置在root根目录下。(虽然脚本有所判断,为了不引起非必要麻烦,建议是根目录)

直接执行脚本文件安装,等待20多分钟即可安装完毕php。以下为脚本源码:

#!/bin/bash
set -e
userdel -r nginx
useradd -s /sbin/nologin nginx
yum install libpng-devel libxml2-devel libXpm-devel libcurl php-mysqlnd freetype-devel gcc gcc-c++ gd libjepg libjepg-devel sqlite-devel \
fontconfig-devel openssl-devel curl curl-devel gd  t1lib-devel  -y -q
#wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xf libzip-1.2.0.tar.gz
cd libzip-1.2.0/
./configure --prefix=/usr/local/libzip && make && make install

ln -sf /usr/lib64/libltdl.so /usr/lib/libltdl.so
cp -rfp /usr/lib64/libXpm.so* /usr/lib/  && cd ~/
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib64
#export PKG_CONFIG_PATH=/usr/local/libzip/lib/pkgconfig
if [ -f php-7.4.6.tar.gz ]
then
echo '安装包已存在,不需要下载了'
else
echo '没有安装包,请准备下载'
read -p "请输入y开始下载: " n

n2=`echo $n | sed 's/y//g'`

if [ -n "$n2" ];then
  echo "你输入的不是y,程序将退出."
  exit
fi


case $n in
y)
echo "开始下载"
wget https://www.php.net/distributions/php-7.4.6.tar.gz
  ;;
*)
  echo "please input   y"
;;
esac
fi

tar -zxf `find / -name  php-7.4.6.tar.gz` -C /usr/local/src/
rpm -ivh `find / -name oniguruma-6.8.2-1.el7.x86_64.rpm` --force
rpm -ivh `find / -name oniguruma-devel-6.8.2-1.el7.x86_64.rpm` --force
ln -sf /usr/local/libzip/lib/pkgconfig/libzip.pc /usr/lib64/pkgconfig/
cd /usr/local/src/php-7.4.6
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-freetype  --with-zlib --with-libxml --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-ftp --enable-gd --enable-gd-jis-conv --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-pear --enable-maintainer-zts --without-gdbm --with-gnu-ld --enable-libgcc
echo "预编译完成,开始正式安装PHP,等待5秒后开始"
sleep 5

make 2>&1 |tee /root/make.log && make install
echo "安装完毕,开始初始化的工作"
cp -f /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
rm -rf /etc/php.ini
cp -f /usr/local/src/php-7.4.6/php.ini-production /usr/local/php/etc/php.ini
ln -sf /usr/local/php/etc/php.ini /etc/php.ini
cp -f /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
ln -sf /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf
cp -f /usr/local/src/php-7.4.6/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
echo "user=nginx
group=nginx">>/usr/local/php/etc/php-fpm.conf
#echo "<?php
    phpinfo();
    ?>
#">/usr/local/nginx/html/info.php
echo "执行命令 vim /usr/local/php/etc/php-fpm.conf,将 pid=run/php-fpm.pid的注释去掉"
echo "修改 vim /usr/local/nginx/conf/nginx.conf文件,添加 user=nginx nginx;
将fastcgi_param 这一行修改 $document_root$fastcgi_script_name;
最后执行 service php-fpm start nginx -s reload"

 

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐