【问题标题】:Setting memcached for lampp on linux using pecl使用 pecl 在 linux 上为 lampp 设置 memcached
【发布时间】:2012-12-23 16:13:15
【问题描述】:

原帖

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

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

在终端中

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

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

当我尝试在浏览器中打开 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

this guy 似乎有同样的问题,但扩展名不同。当我尝试使用以下命令编译 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:i386phpize CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure make 后,memcached 编译正常。但是它仍然不起作用。再次检查 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

【问题讨论】:

  • 你安装的 libmemcached 库的版本可能只有 64 位?

标签: php linux memcached pecl lampp


【解决方案1】:

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

在编译 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。

【讨论】:

  • 我设法编译了 memcached,现在我在 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:找不到版本“GCC_4.2.0”(/usr/lib/i386-linux-gnu/libstdc++.so.6 需要)在第 0 行的未知中
  • 我想我应该安装旧版本的编译器,但是怎么做呢?例如 apt-get install g++-4.2.0 不起作用。我知道我是新手...
  • 这个错误我不明白 :( 顺便说一句。你能说出为什么你的 php 是 32 位的吗?
  • 我认为目前没有 64 位版本的 xampp
【解决方案2】:

有一种方法可以解决你的问题

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

并将 libgcc_s.so 复制到

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

【讨论】:

  • 谢谢,这行得通!我奖励了你们,但接受了 Raber 的回答,因为我希望你们俩都获得一些声誉
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多