web-dev-qa-db-ja.com

memcache.soのトラブル

他の誰かが作ったサイトを立ち上げるように頼まれました。これはWordpressショップサイトで、Memcachedを実行する必要があります。ローカルサーバーでMemcachedとmemcachephpプラグインを動作させるのに問題があります。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 ver 5.3.8、Memcached ver 1.4.13、およびMemcache PHPプラグインver3.0.6)を実行しています。

誰かが私がこれを修正する方法を知っていますか?

ありがとう!

8
CourtDemone

Davidがコメントで述べたように、memcached自体ではなく、memcacheプラグインをビルドするときは、次のようにrun configureを追加する必要があります。

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

それは私にとって完璧に機能しました。

8
CourtDemone

Memcache.soが実際にリンクされていることを確認するための最初のステップとして提案します。 Linuxではlddを使用し、OSXではotool -L ちゃんと覚えたら。これは、プラグインがシステム上の複数のmemcacheライブラリの間違ったライブラリ、または互換性のないバージョンのいずれかを取得しているように見えます。

2
rackandboneman

補遺-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"
2
wbit