我在安装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,攻击文件以尝试构建。仍然没有运气......
答案 0 :(得分:18)
如果您不需要SASL,请回答:
libmemcached目录[no]:no --disable-memcached-sasl
答案 1 :(得分:15)
使用此组合解决了这个问题:
我希望这有帮助。
答案 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)
步骤:
设定: 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
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