3

原帖

首先,我想安装memcached,而不是 memcache。

从昨天开始,我正在尝试设置 memcached 以在 ubuntu 12.10 上与我的 lampp 服务器一起使用。我已经遵循了几乎所有我能找到的教程。最近,我尝试做的是:

在终端

apt-get install libmemcached-dev 
cd /opt/lampp
./bin/pecl install memcached

然后在 php.ini 文件中添加 extension="memcached.so" 。在此之后我重新启动lampp使用/opt/lampp/lampp restart

当我尝试在浏览器中打开 php 脚本时,它刚刚被下载。运行tail -20 /opt/lampp/logs/php_error_log这是我看到的:

PHP Warning:  PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so' - /opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so: wrong ELF class: ELFCLASS64 in Unknown on line 0

看来这家伙有同样的问题,但扩展名不同。当我尝试使用以下命令编译 32 位版本的扩展时:

phpize
CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure
make

make抛出以下错误:

/usr/bin/ld: skipping incompatible /usr/local/lib/libmemcached.so when searching for -lmemcached
/usr/bin/ld: cannot find -lmemcached
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
make: *** [memcached.la] Error 1

问题是我什至不知道我是否走在正确的道路上。如果有人可以编写简短的分步指南如何使其正常工作,或者只是告诉我问题出在哪里,那就太好了。

更新

执行后sudo dpkg --add-architecture i386 sudo apg-get update sudo apt-get install libmemcached-dev:i386 libz-dev:i386memcachedphpize CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure make编译正常。但是它仍然不起作用。再次检查 php 错误日志后,我得到了这个

PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so' - /opt/lampp/lib/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/i386-linux-gnu/libstdc++.so.6) in Unknown on line 0
4

2 回答 2

1

您走在正确的道路上-您的lampp是32位,而系统的其余部分(我假设)是64位。因此,当您安装 libmemcached 时,编译后的 php-libmemcached 是 64 位版本。这就是为什么您会收到“错误的 ELF 类”错误。

在编译 32 位版本的 php-memchached 之前,您需要安装 32 位版本的 libmemcached 和 libz(以及它们的头文件)。

你需要: sudo dpkg --add-architecture i386 sudo apg-get update sudo apt-get install libmemcached-dev:i386 libz-dev:i386

我认为这应该足以让您编译 32 位版本的 php-libmemcached。

于 2012-12-23T17:04:55.830 回答
1

有一种肮脏的方法可以解决您的问题

/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.x.x

并将 libgcc_s.so 复制到

/opt/lampp/lib并将其重命名为libgcc_s.so.1以覆盖以前的文件。

于 2012-12-28T16:13:43.633 回答