Php

memcache.so 的問題

  • October 29, 2015

我被要求啟動一個別人建立的網站。這是一個需要 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。

有誰知道我該如何解決這個問題?

謝謝!

正如 David 在評論中提到的,在建構 memcache 外掛時,而不是 memcached 本身,您必須configure像這樣添加 run:

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

這對我來說非常有效。

我建議作為第一步,確保 memcache.so 真正連結到什麼。在 linux 上你會使用ldd,在 OSX 上它應該是otool -LIIRC。這看起來像外掛獲取了系統上多個 memcache 庫中錯誤的一個,或者獲取了不兼容的版本。

引用自:https://serverfault.com/questions/386392