安装pecl memcached时出错

时间:2014-06-25 11:11:45

标签: centos memcached pecl

我在安装pecl memcached软件包时遇到了麻烦。

对于任何yum或pear / pecl安装命令没有任何乐趣我提到了这个问题Install PECL Memcached Error并开始尝试手动配置/制作

我使用pecl下载最新的(memcached-2.2.0)然后解压,phpize ...

如果我使用--disable-memcached-sasl配置,则配置完成但是失败。看起来像语法错误

In file included from /root/memcached-2.2.0/php_memcached_private.h:28,
                 from /root/memcached-2.2.0/php_memcached.c:26:
/root/memcached-2.2.0/php_libmemcached_compat.h:56: error: expected ‘=’, ‘,’, ‘;’, ‘asm’     or ‘__attribute__’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:328: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:329: error: expected declaration specifiers or     ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:330: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c: In function ‘php_memc_get_impl’:
/root/memcached-2.2.0/php_memcached.c:594: warning: passing argument 4 of     ‘memcached_mget_by_key’ from incompatible pointer type
/usr/include/libmemcached/memcached_get.h:38: note: expected ‘char **’ but argument is of type ‘const char **’
/root/memcached-2.2.0/php_memcached.c: In function ‘php_memc_getMulti_impl’:

还有更多,但希望这是一个有用的指标

如果我使用--with-libmemcached -dir = / usr / include / libmemcached我得到

checking for libmemcached location... configure: error: Unable to find memcached.h under /usr/include/libmemcached

但那是memcached.h的地方

如果我使用--with-libmemcached-dir = no configure gives

configure: error: no, libmemcached sasl support is not enabled. Run configure with --disable-memcached-sasl to disable this check

如果我添加--disable-memcached-sasl选项,则配置完成,但make失败并再次出现语法错误

感觉我被困在一个循环中。

这不是我第一次从头开始设置服务器以使用memcached(虽然我猜是第一次)我不记得以前有过任何问题。

任何人都有想法吗?

这看起来像个好领导

http://blusmurf.net/2012/08/27/pecl-memcache-build-error/

但不是快乐

我也一直在从php-memcached的github页面调查此问题

https://github.com/php-memcached-dev/php-memcached/issues/69

我现在尝试使用2.1和2.2,攻击文件以尝试构建。仍然没有运气......

7 个答案:

答案 0 :(得分:18)

如果您不需要SASL,请回答:

libmemcached目录[no]:no --disable-memcached-sasl

答案 1 :(得分:15)

使用此组合解决了这个问题:

  1. libmemcached release 1.0.16 - 从源代码安装
  2. php-memcached release 2.1.0 - 从源码和安装中安装在php.in
  3. 中添加了memcached.so

    我希望这有帮助。

答案 2 :(得分:8)

第1步 - 安装SASL:

yum install cyrus-sasl-devel

第2步 - 在安装了SASL的情况下编译libmemcached:

cd ~
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make && make install

第3步 - 安装PHP Memcached:

pecl install memcached

(不要指定libmemcached-dir

答案 3 :(得分:2)

如果您不需要sasl支持,这是一种安装2.2.X的简便方法:

pecl_memcached_ver="2.2.0"
pecl download memcached-${pecl_memcached_ver}
tar xzvf memcached-${pecl_memcached_ver}.tgz
cd memcached-${pecl_memcached_ver}/
phpize
./configure --disable-memcached-sasl
make
make install
cd ..
rm -r memcached-${pecl_memcached_ver}
echo "extension=memcached.so" > /etc/php5/fpm/conf.d/20-memcached.ini

然后运行php5 -i以测试它是否正确安装了2.2.x

答案 4 :(得分:1)

步骤:

  1. sudo apt-get install libmemcached libmemcached-dev
  2. sudo mkdir -p / usr / lib / x86_64-linux-gnu / include / libmemcached&& sudo ln -s /usr/include/libmemcached/memcached.h /usr/lib/x86_64-linux-gnu/include/libmemcached/memcached.h
  3. echo" / usr / lib / x86_64-linux-gnu --disable-memcached-sasl" | sudo /opt/phpfarm/inst/php-5.4.40/bin/pecl -C /opt/phpfarm/inst/php-5.4.40/etc/pear.conf install memcached
  4. 设定: Ubuntu 14.04.x LTS x64(可靠的tahr) phpfarm(最新)与pecl PHP 5.4.40 memcached 2.2.0

    注意:显然,您必须根据系统

    替换路径

答案 5 :(得分:0)

程序@rynop非常好,一切都很棒!

现在你想要打包部署怎么样?我的目标部署在Ubuntu 14.04 LTS上运行,我希望它将上游php5-memcached包替换为一个简单的 .deb 文件。

为此,请使用look at fpm代表" Freaking Package Manager " (原文如此)。它可以用几乎任何东西创建包。

在@rynop程序之后,这就是我所做的:

// Rest of @rynop procedure, modulo this configure options
./configure --enable-memcached-igbinary --disable-memcached-sasl

安装jordansissel/fpm

apt-get install -y pkg-config ruby-dev gcc
gem install fpm

然后,检查要替换的包内容,让我们复制以用于我们自己的目的。

dpkg --list | grep php5-memcached
find /var/cache/apt -type f -name '*php5-memcached*'
dpkg -c /var/cache/apt/archives/php5-memcached_2.1.0-6build1_amd64.deb

我在输出中发现我只需要几个文件夹,所以我创建了它们。

mkdir -p etc/php5/mods-available/
// Adjust memcached.ini to suit your tastes, then prepare it for packaging
cp memcached.ini etc/php5/mods-available/
// Make sure the usr/lib/php5/foo path matches in 
// the result of `dpkg -c` you issued
mkdir -p usr/lib/php5/20121212/
cp modules/memcached.so usr/lib/php5/20121212/

魔术会发生

fpm -s dir -t deb -n php5-memcached -v 2.2.0-wpd -m '<your@email.org>' --description 'PHP 5.5 PECL igbinary + memcached support' -d libmemcached10 etc/ usr/

答案 6 :(得分:0)

在安装了libmemcached-devel版本1.0.16的CentOS 7.2上,您应该使用 / usr 回答问题:

libmemcached directory [no] : /usr