Problemi con memcache.so


8

Mi è stato chiesto di lanciare un sito creato da qualcun altro. È un sito del negozio di Wordpress che necessita di Memcached per funzionare e ho avuto problemi a far funzionare Memcached e il plugin phc memcache sul mio server locale. Prima di installare memcached e il plug-in PHP memcache, otterrei questo errore:

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

Ora che ho memcached e il plugin memcache PHP installato (tramite Homebrew), ottengo una pagina "Nessun dato ricevuto" e ottengo questo errore nel mio log degli errori di 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)

Ho provato a cercare quel pid in Activity Monitor senza risultati, e cambia ogni volta che provo a caricare la pagina. Inoltre, non riesco a trovare nulla su _mmc_queue_pop da nessuna parte.

Sono in esecuzione Mac OSX Lion, PHP versione 5.3.8, Memcached versione 1.4.13 e Memcache PHP versione 3.0.6.

Qualcuno sa come posso risolvere questo?

Grazie!


1
Ricostruisci memcached con -fgnu89-inlinein CFLAGS/ CXXFLAGS. Quello che succede è che la inlineparola chiave in base a nuove regole provoca _mmc_queue_popinline in tutti i casi, senza lasciare nulla memcache.soa cui collegarsi dinamicamente.
David Schwartz,

Come posso modificare CFLAGS / CXXFLAGS per Homebrew? Dovrei modificare qualcosa nel file Ruby Forumla?
CourtDemone

Risposte:


8

Come ha detto David nei commenti, quando si crea il plugin memcache, NON memcached stesso, è necessario aggiungere l'esecuzione in configurequesto modo:

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

Ha funzionato perfettamente per me.


2

Vorrei suggerire come primo passo per assicurarsi che cosa memcache.so è realmente collegato. Su Linux useresti ldd, su OSX dovrebbe essere otool -LIIRC. Questo sembra che il plugin ottenga una delle librerie memcache sbagliate sul sistema o una versione incompatibile.


Non sono il più forte in questo genere di cose. Cosa avrei dovuto fare esattamente nel Terminal per farlo?
CourtDemone,

1
Vedo solo che per rendere disponibile otool potresti aver bisogno degli strumenti Xcode installati. In tal caso, dovrebbe essere disponibile una manpage. In ogni caso, probabilmente David ha già risolto il problema.
rackandboneman,

Ho installato la versione più recente di Xcode, insieme agli strumenti da riga di comando. Come ho detto nel commento al post di David, non so come dovrei implementarlo. Qualcuno può darmi una mano con quello?
CourtDemone,

1
Controlla con la documentazione di Homebrew (se è lì che proviene anche la tua memcache) su come impostare "configura opzioni" e CFLAGS. Ti suggerisco di fare confusione con CFLAGS solo se non esiste alcuna "opzione di configurazione" attualmente disponibile. Non ho familiarità con homebrew per dare consigli sui libri di cucina e consigli generici ipotizzando che un ciclo di installazione "./configure --opzioni && make && make install" potrebbe essere fuorviante. Tuttavia, la familiarità con lo stesso ciclo è estremamente utile quando si scherza con QUALSIASI sistema di generazione di sorgenti.
rackandboneman,

Ho bisogno di qualcuno che abbia più familiarità con Homebrew. Ho provato ad aggiungere linee CFLAGS alla formula di installazione di memcached e non è stato installato correttamente.
CourtDemone

2

Addendum - El Capitan, php56, php56-memcache 3.0.8

Dopo aver letto le risposte di David Schwartz e CourtDemone non l'ho ancora capito, fino a quando non ho letto questa risposta su SO su come modificare una formula homebrew.

Ho aggiunto quanto segue alla formula eseguendo brew edit php56-memcachee incollando nelle seguenti righe:

   .  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"

Grazie! Anche un altro riferimento: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.