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

回答:


8

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

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

それは私には完璧に働きました。


2

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


私はこの種のものでは最強ではありません。これを行うには、ターミナルで正確に何をしなければなりませんか?
CourtDemone

1
otoolを使用するには、Xcodeツールをインストールする必要があるかもしれません。その場合、マンページが利用できるはずです。いずれにしても、Davidはおそらくすでに問題を解決しているでしょう。
rackandboneman

最新バージョンのXcodeとコマンドラインツールをインストールしました。Davidの投稿へのコメントで述べたように、それを実装する方法がわかりません。誰かが私を助けてくれますか?
CourtDemone

1
「オプションの構成」とCFLAGSの設定方法については、Homebrewのドキュメント(memcacheもある場合)を確認してください。実際に利用できる「構成オプション」がない場合のみ、CFLAGSをいじることをお勧めします。私は自作に慣れていないので、クックブックのアドバイスを提供できません。また、「./ configure --options && make && make install」インストールサイクルを想定した一般的なアドバイスは誤解を招く可能性があります。それでも、同じサイクルに精通していると、ソースビルドシステムをいじるのに非常に役立ちます。
rackandboneman

Homebrewに詳しい人が必要です。memcachedのインストール式にCFLAGS行を追加しようとしましたが、正しくインストールされませんでした。
CourtDemone

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"

ありがとう!また、別の参照:github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.