Php
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。
有誰知道我該如何解決這個問題?
謝謝!
正如 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 -L
IIRC。這看起來像外掛獲取了系統上多個 memcache 庫中錯誤的一個,或者獲取了不兼容的版本。