memcache.so 的问题

memcache.so 的问题

我被要求启动一个其他人建立的网站。这是一个需要 Memcached 才能运行的 Wordpress 商店网站,但我一直无法在本地服务器上运行 Memcached 和 memcache php 插件。在安装 memcached 和 memcache PHP 插件之前,我会收到此错误:

Fatal error: Class 'Memcache' not found in [Path]wp-content/object-cache.php on line 350

现在我已经安装了 memcached 和 memcache PHP 插件(通过 Homebrew),我收到“未收到数据”页面,并且在我的 Apache 错误日志中收到此错误:

dyld: lazy symbol binding failed: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

dyld: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

[Sat May 05 16:38:27 2012] [notice] child pid 26491 exit signal Trace/BPT trap (5)

我尝试在活动监视器中查找该 pid,但没有成功,每次我尝试加载页面时它都会发生变化。另外,我在任何地方都找不到有关 _mmc_queue_pop 的任何信息。

我正在运行 Mac OSX Lion、PHP 版本 5.3.8、Memcached 版本 1.4.13 和 Memcache PHP 插件版本 3.0.6。

有人知道我该如何解决这个问题吗?

谢谢!

答案1

正如 David 在评论中提到的那样,在构建 memcache 插件时(而不是 memcached 本身),您必须添加configure如下运行:

MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-fgnu89-inline' LDFLAGS='-fgnu89-inline' CXXFLAGS='-fgnu89-inline' ./configure

这对我来说非常有效。

答案2

我建议首先确认 memcache.so 真正链接的对象。在 Linux 上可以使用ldd,在 OSX 上应该是otool -LIIRC。这看起来插件要么获取了系统上多个 memcache 库中的错误库,要么获取了不兼容的版本。

答案3

附录 - El Capitan、php56、php56-memcache 3.0.8

在阅读了 David Schwartz 和 CourtDemone 的答案后,我仍然不明白,直到我读到这个答案关于如何编辑自制配方。

brew edit php56-memcache我通过运行并粘贴以下几行将以下内容添加到公式中:

   .  20     safe_phpize
   .  21 
   +  22     ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.11'
   +  23     ENV['CFLAGS'] = '-fgnu89-inline'
   +  24     ENV['LDFLAGS'] = '-fgnu89-inline'
   +  25     ENV['CXXFLAGS'] = '-fgnu89-inline'
   +  26 
   .  27     system "./configure", "--prefix=#{prefix}",
   .  28                           phpconfig
   .  29     system "make"

相关内容