当前位置:首页 > linux教程 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-21 10:51:46 浏览: 评论:0 

本文章为各位介绍解决编译php memcached扩展的问题:php_libmemcached_compat.h:5:40:错误:libmemcached-1.0/memcached.h:没有那个文件或目录,希望文章对各位有帮助.

服务器是Centos6 64,PHP5.4.23,需要安装php memcached扩展,尝试使用pecl安装:

  1. # yum install libmemcached libmemcached-devel zlib-devel 
  2. # yum -y install php-pear 
  3. # 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,于是下载文件包,一看究竟:

  1. # wget http://pecl.php.net/get/memcached 
  2. # mv memcached memcached.tar.gz 
  3. # tar zxf memcached.tar.gz 
  4. # cd memcached-2.2.0b1/ 
  5. # vi php_libmemcached_compat.h 
  6.   #ifndef PHP_LIBMEMCACHED_COMPAT 
  7.   #define PHP_LIBMEMCACHED_COMPAT 
  8.    
  9.   /* this is the version(s) we support */ 
  10.   #include <libmemcached/memcached.h> 

看到上面包含libmemcached/memcached.h,但事实上memcached.h文件位于:

  1. # find /usr -name memcached.h 
  2. /usr/include/libmemcached/memcached.h 

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

  1. #ifndef PHP_LIBMEMCACHED_COMPAT 
  2. #define PHP_LIBMEMCACHED_COMPAT 
  3. --phpfensi.com  
  4. /* this is the version(s) we support */ 
  5. #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,重新进行,但依然出现错误:

  1. # ./configure --disable-memcached-sasl 
  2. ...省略... 
  3. In file included from /root/download/memcached-2.2.0b1/php_memcached_private.h:28, 
  4.                  from /root/download/memcached-2.2.0b1/php_memcached.c:26: 
  5. /root/download/memcached-2.2.0b1/php_libmemcached_compat.h:53: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘php_memcached_instance_st’ 
  6. ...省略... 

看来此路不通,只有手动编译libmemcached来尝试了,下面是手动编译libmemcached和php memcached扩展.

1.先卸载yum安装的libmemcached

# yum remove libmemcached libmemcached-devel

2.下载源码包

  1. # cd .. 
  2. # wget https://launchpad.net/libmemcached/1.0/1.0.17/+download/libmemcached-1.0.17.tar.gz 
  3. # tar zxf libmemcached-1.0.17.tar.gz 
  4. # cd libmemcached-1.0.17 
  5. # ./configure 
  6. # make 
  7. # make install 

成功安装libmemcached.

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

  1. # cd ../memcached-2.2.0b1 
  2. # find / -name memcached.h 
  3. /root/download/libmemcached-1.0.17/libmemcached/memcached.h 
  4. /root/download/libmemcached-1.0.17/libmemcached-1.0/struct/memcached.h 
  5. /root/download/libmemcached-1.0.17/libmemcached-1.0/memcached.h 
  6. /root/download/libmemcached-1.0.17/libtest/memcached.h 
  7. /root/download/mysql-5.6.15/plugin/innodb_memcached/daemon_memcached/daemon/memcached.h 
  8. /usr/local/include/libmemcached/memcached.h 
  9. /usr/local/include/libmemcached-1.0/struct/memcached.h 
  10. /usr/local/include/libmemcached-1.0/memcached.h 

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

  1. #ifndef PHP_LIBMEMCACHED_COMPAT 
  2. #define PHP_LIBMEMCACHED_COMPAT 
  3.  
  4. /* this is the version(s) we support */ 
  5. #include </usr/local/include/libmemcached/memcached.h> 

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

  1. # phpize 
  2. # ./configure  
  3. # make 
  4. ...省略... 
  5. Build complete. 
  6. Don't forget to run 'make test'. 
  7.  
  8. # make install 
  9. Installing shared extensions: /usr/lib64/php/modules/ 
  10.  

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

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

Tags: memcached php_libmemcached_compat

分享到: