解决编译php memcached扩展的问题:php_libmemcached_compat.h:5:40

本文章为各位介绍解决编译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 install php-pear
# pecl install memcached

但出现错误:
在包含自 /var/tmp/memcached/php_memcached.h:22 的文件中,从 /var/tmp/memcached/php_memcached.c:47:
/var/tmp/memcached/php_libmemcached_compat.h:5:40: 错误:libmemcached-1.0/memcached.h:没有那个文件或目录

上面明显php_libmemcached_compat.h文件中找不到memcached.h,于是下载文件包,一看究竟:
# wget http://pecl.php.net/get/memcached
# mv memcached memcached.tar.gz
# tar zxf memcached.tar.gz
# cd memcached-2.2.0b1/
# vi php_libmemcached_compat.h
17 #ifndef PHP_LIBMEMCACHED_COMPAT
18 #define PHP_LIBMEMCACHED_COMPAT
19
20 /* this is the version(s) we support */
21 #include <libmemcached/memcached.h>

看到上面包含libmemcached/memcached.h,但事实上memcached.h文件位于:
# find /usr -name memcached.h
/usr/include/libmemcached/memcached.h

那么修改上面的路径为正常路径:

17 #ifndef PHP_LIBMEMCACHED_COMPAT
18 #define PHP_LIBMEMCACHED_COMPAT
19
20 /* this is the version(s) we support */
21 #include </usr/include/libmemcached/memcached.h>

保存后,使用phpize来编译:

configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check
cyrus-sasl-devel

只好加上 --disable-memcached-sasl,重新进行,但依然出现错误:
# ./configure --disable-memcached-sasl
...省略...
In file included from /root/download/memcached-2.2.0b1/php_memcached_private.h:28,
from /root/download/memcached-2.2.0b1/php_memcached.c:26:
/root/download/memcached-2.2.0b1/php_libmemcached_compat.h:53: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘php_memcached_instance_st’
...省略...

看来此路不通,只有手动编译libmemcached来尝试了。

下面是手动编译libmemcached和php memcached扩展

1. 先卸载yum安装的libmemcached

# yum remove libmemcached libmemcached-devel

2. 下载源码包

# cd ..
# wget https://launchpad.net/libmemcached/1.0/1.0.17/+download/libmemcached-1.0.17.tar.gz
# tar zxf libmemcached-1.0.17.tar.gz
# cd libmemcached-1.0.17
# ./configure
# make
# make install

成功安装libmemcached。

3. 接下来安装memcached,先查找memcached.h头文件在哪里,需要在php_libmemcached_compat.h设置正确的include路径

# cd ../memcached-2.2.0b1
# find / -name memcached.h
/root/download/libmemcached-1.0.17/libmemcached/memcached.h
/root/download/libmemcached-1.0.17/libmemcached-1.0/struct/memcached.h
/root/download/libmemcached-1.0.17/libmemcached-1.0/memcached.h
/root/download/libmemcached-1.0.17/libtest/memcached.h
/root/download/mysql-5.6.15/plugin/innodb_memcached/daemon_memcached/daemon/memcached.h
/usr/local/include/libmemcached/memcached.h
/usr/local/include/libmemcached-1.0/struct/memcached.h
/usr/local/include/libmemcached-1.0/memcached.h

4. 修改memcached-2.2.0b1下的php_libmemcached_compat.h文件中include路径为正确路径:

17 #ifndef PHP_LIBMEMCACHED_COMPAT
18 #define PHP_LIBMEMCACHED_COMPAT
19
20 /* this is the version(s) we support */
21 #include </usr/local/include/libmemcached/memcached.h>

5. 开始编译安装php memcached扩展:

# phpize
# ./configure
# make
...省略...
Build complete.
Don't forget to run 'make test'.

# make install
Installing shared extensions: /usr/lib64/php/modules/

6. 查看是否已生成了memcached.so:

# ls /usr/lib64/php/modules/
bcmath.so gd.so memcached.so mysql.so phar.so sysvsem.so xcache.so xsl.so
curl.so json.so memcache.so pdo_mysql.so posix.so sysvshm.so xmlreader.so zip.so
dom.so mbstring.so mysqli.so pdo.so sqlite3.so tidy.so xmlrpc.so
fileinfo.so mcrypt.so mysqlnd_memcache.so pdo_sqlite.so sysvmsg.so wddx.so xmlwriter.so

(0)

相关推荐

  • 如何解决格式与文件扩展名指定的格式不一致?

    如何解决格式与文件扩展名指定的格式不一致?或许很多小伙伴为此感到迷惑,下面小编为你介绍下具体的解决方法,希望可以帮助到你. 操作方法 01 按快捷键WIN+R,输入"regedit" ...

  • Excel怎么解决格式与文件扩展名不一致?

    用2007或2010打开.xls格式的excel文件,有时会出现下面这样的提示:您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致.即格式与文件扩展名不一致.单击"是" ...

  • 解决编译错误'resourceFile' does not exist.

    小编在将Android Studio到2.0版本后,出现了编译失败的问题,clean project然后重新编译还是出现同样的问题(debug-stripped.ap_' specified for ...

  • 如何解决“Word无法打开……扩展名不匹配”

    有时在打开一个Word文件时会打不开,并有如下提示"Word无法打开该文件,因为文件格式与扩展名不匹配",这里介绍一个简单的处理方法 操作方法 01 在需要打开的文件上右键,[重命 ...

  • 解决磁盘从原来的G盘变成H盘的问题

    现在电脑有的软件装在移动硬盘中,有时路径出现错误,常常找不到跳径而出现找不到的错误,有2种办法可以解决哦: 第一种方法、可以直接修改桌面快捷方式,右击桌面快捷方式, 选择属性,再把路径改成相应的磁盘符 ...

  • Win8升级Win8.1过程中安装失败错误0x80004005的解决方法

    最近有部分用户从Win8升级Win8.1过程中,无故出现安装失败,错误0x80004005的情况。针对此问题,微软官方还未给出完美的解决办法。不过有一些电脑高手为我们提供两种比较可行的解决办法,具体如 ...

  • 电脑中的有道词典在浏览器中无法使用划词取词功能如何解决

    电脑中的有道词典在浏览器中无法使用划词取词功能如何解决

  • g++模板编译方法

    机器版本 linux 2.4.30 ; g++ 3.3.4 g++ 对模板类编译的后,连接时,出现“undefined reference to `int f<long>(long& ...

  • 说说php优化那些事

    操作方法 01 我们在编写程序时,总是想要使自己的程序占用资源最小,运行速度更快,代码量更少.往往我们在追求这些的同时却失去了很多东西.下面我想讲讲我对PHP优化的理解.优化的目的是花最少的代价换来最 ...