我被要求启动一个其他人建立的网站。这是一个需要 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 -L
IIRC。这看起来插件要么获取了系统上多个 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"