Problemas con memcache.so

8

Me pidieron que lanzara un sitio que alguien más construyó. Es un sitio de la tienda de Wordpress que necesita Memcached para ejecutarse, y he tenido problemas para que Memcached y el plugin memcache php funcionen en mi servidor local. Antes de instalar memcached y el plugin PHP memcache, obtendría este error:

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

Ahora que tengo memcached y el plugin PHP memcache instalado (a través de Homebrew), aparece la página "No se recibieron datos" y aparece este error en mi registro de errores de 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)

He intentado buscar ese pid en el Monitor de actividad en vano, y cambia cada vez que intento cargar la página. Además, no puedo encontrar nada sobre _mmc_queue_pop en ningún lado.

Estoy ejecutando Mac OSX Lion, PHP ver 5.3.8, Memcached ver 1.4.13 y Memcache PHP plugin ver 3.0.6.

¿Alguien sabe como puedo arreglar esto?

¡Gracias!

CourtDemone
fuente
1
Reconstruir memcached con -fgnu89-inlinein CFLAGS/ CXXFLAGS. Lo que sucede es que la inlinepalabra clave bajo las nuevas reglas hace _mmc_queue_popque se alinee en todos los casos, sin dejar nada para memcache.sovincular dinámicamente.
David Schwartz
¿Cómo puedo editar los CFLAGS / CXXFLAGS para Homebrew? ¿Tendría que modificar algo en el archivo Ruby Forumla?
CourtDemone

Respuestas:

8

Como David mencionó en los comentarios, al compilar el complemento memcache, NO memcached en sí mismo, debe agregar una ejecución configurecomo esta:

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

Eso funcionó perfectamente para mí.

CourtDemone
fuente
2

Sugeriría como un primer paso para asegurarme de qué memcache.so está realmente vinculado. En Linux usarías ldd, en OSX debería ser otool -LIIRC. Esto parece que el complemento se apodera de una de las múltiples bibliotecas de memoria caché del sistema o de una versión que es incompatible.

rackandboneman
fuente
No soy el más fuerte en este tipo de cosas. ¿Qué tendría que hacer exactamente en la Terminal para hacer esto?
CourtDemone
1
Solo veo que para que otool esté disponible, es posible que necesite instalar herramientas Xcode. En cuyo caso, una página de manual debería estar disponible. De alguna manera, David probablemente ya tiene el problema resuelto.
rackandboneman
Tengo instalada la versión más nueva de Xcode, junto con las herramientas de línea de comandos. Como dije en un comentario a la publicación de David, no sé cómo se supone que debo implementar eso. ¿Alguien puede ayudarme con eso?
CourtDemone
1
Consulte con la documentación de Homebrew (si es de allí de donde proviene también su memcache) sobre cómo establecer "configurar opciones" y CFLAGS. Le sugiero que solo se meta con CFLAGS si no hay una "opción de configuración" realmente disponible. No estoy familiarizado con homebrew para dar consejos sobre libros de cocina, y los consejos genéricos suponen que un ciclo de instalación "./configure --options && make && make install" puede ser engañoso. Aún así, la familiaridad con el mismo ciclo es EXTREMADAMENTE útil cuando se está jugando con CUALQUIER sistema de compilación de origen.
rackandboneman
Necesito a alguien que esté más familiarizado con Homebrew. Intenté agregar líneas CFLAGS a la fórmula de instalación de memcached y no se instaló correctamente.
CourtDemone
2

Anexo - El Capitan, php56, php56-memcache 3.0.8

Después de leer las respuestas de David Schwartz y CourtDemone, todavía no lo entendí, hasta que leí esta respuesta en SO sobre cómo editar una fórmula casera.

Agregué lo siguiente a la fórmula ejecutando brew edit php56-memcachey pegando en las siguientes líneas:

   .  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
fuente
¡Gracias! También otra referencia: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado