Probleme mit memcache.so

8

Ich wurde gebeten, eine Site zu starten, die jemand anderes erstellt hat. Es ist eine Wordpress-Shop-Site, für deren Ausführung Memcached erforderlich ist, und ich hatte Probleme, Memcached und das Memcache-PHP-Plugin auf meinem lokalen Server zum Laufen zu bringen. Vor der Installation von memcached und dem memcache-PHP-Plugin wird folgende Fehlermeldung angezeigt:

Fatal error: Class 'Memcache' not found in [Path]wp-content/object-cache.php on line 350

Nachdem ich memcached und das memcache-PHP-Plugin installiert habe (über Homebrew), erhalte ich die Seite "Keine Daten empfangen" und erhalte diesen Fehler in meinem Apache-Fehlerprotokoll:

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)

Ich habe erfolglos versucht, diese PID im Aktivitätsmonitor zu suchen, und sie ändert sich jedes Mal, wenn ich versuche, die Seite zu laden. Außerdem kann ich nirgendwo etwas über _mmc_queue_pop finden.

Ich verwende Mac OSX Lion, PHP Version 5.3.8, Memcached Version 1.4.13 und Memcache PHP Plugin Version 3.0.6.

Weiß jemand, wie ich das beheben kann?

Vielen Dank!

CourtDemone
quelle
1
Memcached mit -fgnu89-inlinein CFLAGS/ neu erstellen CXXFLAGS. Was passiert, ist, dass das inlineSchlüsselwort unter neuen Regeln _mmc_queue_popin allen Fällen inline ist und nichts für memcache.soeine dynamische Verknüpfung übrig bleibt .
David Schwartz
Wie kann ich die CFLAGS / CXXFLAGS für Homebrew bearbeiten? Muss ich etwas in der Ruby Forumla-Datei ändern?
CourtDemone

Antworten:

8

Wie David in den Kommentaren erwähnt hat, müssen Sie beim Erstellen des Memcache-Plugins, das sich NICHT selbst zwischengespeichert hat, einen Lauf configurewie folgt hinzufügen :

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

Das hat bei mir perfekt funktioniert.

CourtDemone
quelle
2

Ich würde als ersten Schritt vorschlagen, um sicherzustellen, gegen was memcache.so wirklich verlinkt ist. Unter Linux würden Sie verwenden ldd, unter OSX sollte es otool -LIIRC sein. Es sieht so aus, als würde das Plugin entweder die falsche einer von mehreren Memcache-Bibliotheken auf dem System oder eine nicht kompatible Version abrufen.

Rackandboneman
quelle
Ich bin nicht der Stärkste in solchen Sachen. Was genau müsste ich im Terminal tun, um dies zu tun?
CourtDemone
1
Ich sehe nur, dass für die Verfügbarkeit von otool möglicherweise Xcode-Tools installiert sein müssen. In diesem Fall sollte eine Manpage verfügbar sein. In jedem Fall hat David das Problem wahrscheinlich bereits gelöst.
Rackandboneman
Ich habe die neueste Version von Xcode zusammen mit Befehlszeilentools installiert. Wie ich in einem Kommentar zu Davids Beitrag sagte, weiß ich nicht, wie ich das umsetzen soll. Kann mir jemand dabei helfen?
CourtDemone
1
Informationen zum Festlegen von "Konfigurationsoptionen" und CFLAGS finden Sie in der Dokumentation von Homebrew (sofern dort auch Ihr Memcache stammt). Ich schlage vor, dass Sie sich nur mit CFLAGS anlegen, wenn tatsächlich keine "Konfigurationsoption" verfügbar ist. Ich bin mit Homebrew zu wenig vertraut, um Kochbuch-Ratschläge zu geben, und allgemeine Ratschläge unter der Annahme, dass ein Installationszyklus "./configure --options && make && make install" irreführend sein könnte. Trotzdem ist die Vertrautheit mit demselben Zyklus EXTREM hilfreich, wenn Sie mit JEDEM Quell-Build-System herumspielen.
Rackandboneman
Ich brauche jemanden, der mit Homebrew besser vertraut ist. Ich habe versucht, der Installationsformel von memcached CFLAGS-Zeilen hinzuzufügen, die jedoch nicht ordnungsgemäß installiert wurden.
CourtDemone
2

Nachtrag - El Capitan, php56, php56-memcache 3.0.8

Nachdem ich die Antworten von David Schwartz und CourtDemone gelesen hatte, bekam ich sie immer noch nicht, bis ich diese Antwort auf SO über das Bearbeiten einer Homebrew-Formel las .

Ich habe der Formel Folgendes hinzugefügt, indem ich brew edit php56-memcachedie folgenden Zeilen ausgeführt und eingefügt habe :

   .  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"
wbit
quelle
Vielen Dank! Auch eine andere Referenz: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado