解决编译PHP找不到libc-client.a的问题

最近PHP爆出漏洞,老高也在升级PHP版本,并加入一些支持,但是遇到这个问题很蛋疼

configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
网上搜了各种教程,各种cp都没用,索性我们就自己编译吧!

I. 安装devel库

yum install pam-devel libc-client libc-client-devel -y

如果使用了yum安装了libc-client,那么在以后编译参数--with-imap=/usr/local/php-imap中的路径应该删除,即--with-imap。

如果这样还不能解决,那么就需要手动编译imap2007f了!

II. 手动编译imap2007f

脚本取自 http://forum.directadmin.com/showthread.php?t=45434

在/usr/src目录下运行以下脚本,将会在/usr/local/php-imap目录下生成imap需要的库

#!/bin/sh
# Script for PHP-IMAP installation. 0.1b
# Written by Martynas Bendorius (smtalk)

CWD=`pwd`
OS=`uname`

#Is it a 64-bit OS?
B64=0

B64COUNT=`uname -m | grep -c 64`
if [ "$B64COUNT" -eq 1 ]; then
    B64=1
    LD_LIBRARY_PATH=/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib
    export LD_LIBRARY_PATH
fi

if [ ! -e /usr/include/krb5.h ] && [ -e /etc/redhat-release ]; then
    echo "Installing krb5-devel"
    yum -y install krb5-devel
fi

VERSION=2007f
PROTOCOL=ftp
URL="${PROTOCOL}://ftp.cac.washington.edu/imap/imap-${VERSION}.tar.Z"
FILENAME=imap-${VERSION}
TARBALL=${FILENAME}.tar.Z

echo "Downloading ${TARBALL}..."
wget -O ${TARBALL} ${URL}
tar xzf ${TARBALL}
cd ${FILENAME}

echo "Installing ${FILENAME}..."

if [ ${OS} = "FreeBSD" ]; then
    if [ ${B64} -eq 0 ]; then
        make bsf
    else
        make bsf EXTRACFLAGS=-fPIC
    fi
else
    perl -pi -e 's#SSLDIR=/usr/local/ssl#SSLDIR=/etc/pki/tls#' src/osdep/unix/Makefile
    perl -pi -e 's#SSLINCLUDE=\$\(SSLDIR\)/include#SSLINCLUDE=/usr/include/openssl#' src/osdep/unix/Makefile
    perl -pi -e 's#SSLLIB=\$\(SSLDIR\)/lib#SSLLIB=/usr/lib/openssl#' src/osdep/unix/Makefile
    if [ ${B64} -eq 0 ]; then
        make slx
    else
        make slx EXTRACFLAGS=-fPIC
    fi
fi

echo "Copying files to /usr/local/php-imap"
mkdir -p /usr/local/php-imap/include
mkdir -p /usr/local/php-imap/lib
chmod -R 077 /usr/local/php-imap
cp -f c-client/*.h /usr/local/php-imap/include/
cp -f c-client/*.c /usr/local/php-imap/lib/
cp -f c-client/c-client.a /usr/local/php-imap/lib/libc-client.a
cd ..
rm -rf ${FILENAME}

if [ -d /usr/lib/x86_64-linux-gnu ] && [ ! -d /usr/kerberos/lib ]; then
    mkdir -p /usr/kerberos
    ln -s /usr/lib/x86_64-linux-gnu /usr/kerberos/lib
fi

exit 0;

III. 开始编译

下面是编译PHP的参数,如果出现问题,请参考编译PHP5.6 和 PHP编译错误的解决办法。

./configure --prefix=/usr/local/php --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --enable-ftp --with-imap=/usr/local/php-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --disable-fileinfo
IV. 其他问题

在本次编译中,老高又遇到了几个怪事

set --enable-opcache=no

configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no
这个问题还是库文件的链接问题

解决:

echo /usr/local/lib > /etc/ld.so.conf.d/local.conf
ldconfig -v
让编译的PHP支持memcache

时间: 2024-10-04 10:38:04

解决编译PHP找不到libc-client.a的问题的相关文章

使用Android studio创建的AIDL编译时找不到自定义类的解决办法_Android

使用AS创建ADIL文件时AS会在main文件夹下给我们生成一个aidl文件夹和一个相同包名的包,通常我们会把所有和ADIL相关的类或文件放在这个包下,但是如果存在自定义的类时,程序编译时无法通过,提示找不到自定义的包.解决办法如下,在启动Module的build.gradle中加入如下代码: sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', '

使用Android studio创建的AIDL编译时找不到自定义类的解决办法

使用AS创建ADIL文件时AS会在main文件夹下给我们生成一个aidl文件夹和一个相同包名的包,通常我们会把所有和ADIL相关的类或文件放在这个包下,但是如果存在自定义的类时,程序编译时无法通过,提示找不到自定义的包.解决办法如下,在启动Module的build.gradle中加入如下代码: sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', '

c语言-vxworks6.8运行调用动态库程序出现找不到libc.so.1

问题描述 vxworks6.8运行调用动态库程序出现找不到libc.so.1 wind river workbench3,2上编译的动态库,在vxworks系统中运行调用动态库的程序,出现找不到libc.so.1的文件,在C盘的搜索一下,有很多的libc.so.1文件,并将该路径添加到调用动态库程序中,运行还是提示找不到libc.so.1,有没有大神遇到这样的问题啊,帮我看一下!!!!!!! 解决方案 自己顶一个,望大神来帮我! 解决方案二: JNI调用动态库.so程序运行时加载动态库canno

解决编译php memcached扩展的问题:php

 本文章为各位介绍解决编译php memcached扩展的问题:php_libmemcached_compat.h:5:40: 错误:libmemcached-1.0/memcached.h:没有那个文件或目录,希望文章对各位有帮助.     服务器是Centos6 64,PHP5.4.23,需要安装php memcached扩展 尝试使用pecl安装: # yum install libmemcached libmemcached-devel zlib-devel # yum -y insta

未能找到-C#. vs项目问题。 求大神解决。.exe找不到

问题描述 C#. vs项目问题. 求大神解决..exe找不到 未能找到文件 exe. pdb. 怎么解决? 重新生成都不行 解决方案 说明你的代码编译有问题,编译不成功,没有生成这个程序,先看下输出,程序哪里出错了.

文件传输-java 编译出现找不到符号错误

问题描述 java 编译出现找不到符号错误 //导入包import javax.swing.JPanel;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JTextField;import static java.awt.BorderLayout.*;import javax.swing.JScrollPane;import java.awt.

javac 找不到符号-javac编译Servlet找不到符号

问题描述 javac编译Servlet找不到符号 这是我的代码: 这是我的classPath配置: 但javac 编译的时候还是报错: 求大神指点

javase-JAVA 程序在编译时找不到符号(按照书中的程序敲进去的)求助!!!

问题描述 JAVA 程序在编译时找不到符号(按照书中的程序敲进去的)求助!!! 我刚刚学习JAVA,看了几天书,今天安装了jdk-8u45-windows-x64后就按照书上的程序敲了一下的程序,可是编译的时候出现错误如下: c5_13.java:8:错误:找不到符号 System.out.Println("class name:"+this.getClass().getName()); 符号: 方法 Println(String) 位置:类型为PrintStream的变量 out c

解决编译imagick-3.0.1时Cannot locate header file MagickWand.h错误

解决编译imagick-3.0.1时Cannot locate header file http://www.aliyun.com/zixun/aggregation/16764.html">MagickWand.h错误 ImageMagick 6.8之后的版本目录结构改变了,我们查询到ImageMagick的结果如下 [root@localhost ~]# ll /usr/local/include/总用量 48-rw-r--r--. 1 root root  9343 6月   8 1