memcache.so的问题


8

我被要求启动其他人建立的网站。这是一个需要运行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
重建与memcached的-fgnu89-inlineCFLAGS/ CXXFLAGS。发生的情况是,inline新规则下的关键字导致_mmc_queue_pop在所有情况下都内联,没有任何内容memcache.so可以动态链接到。
David Schwartz

如何编辑Homebrew的CFLAGS / CXXFLAGS?我需要修改Ruby Forumla文件中的内容吗?
CourtDemone 2012年

Answers:


8

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

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

这对我来说非常有效。


2

我建议作为第一步,以确保真正链接到什么memcache.so。在Linux上,您应该使用ldd;在OSX上,它应该是otool -LIIRC。看起来该插件持有系统上多个内存缓存库中错误的一个,或者版本不兼容。


我不是这种能力最强的人。我到底要在终端中做什么?
CourtDemone 2012年

1
我只是看到要使otool可用,您可能需要安装Xcode工具。在这种情况下,应该有一个联机帮助页。无论如何,大卫可能已经确定了这个问题。
rackandboneman'5

我已经安装了最新版本的Xcode,以及命令行工具。正如我在评论David的帖子时所说的那样,我不知道该怎么实现。有人可以帮我吗?
CourtDemone 2012年

1
有关如何设置“配置选项”和CFLAGS的信息,请查阅Homebrew的文档(如果这也是您的内存缓存所在的位置)。我建议您仅在没有实际可用的“配置选项”的情况下才使用CFLAGS。我对自制软件不太熟悉,无法给出菜谱建议,并且假定“ ./configure --options && make && make install”安装周期的一般建议可能会引起误解。尽管如此,对同一周期的熟悉绝对有助于弄清任何源代码构建系统。
rackandboneman

我需要一个更熟悉Homebrew的人。我尝试将CFLAGS行添加到memcached的安装公式中,但未正确安装。
CourtDemone 2012年

2

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

在阅读了David Schwartz和CourtDemone的答案之后,我仍然不明白,直到我在SO上阅读了有关如何编辑自制配方的答案

我通过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"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.