8 votes

Problèmes avec memcache.so

J'ai été chargé de lancer un site que quelqu'un d'autre a construit. Il s'agit d'un site de boutique Wordpress qui a besoin de Memcached pour fonctionner, et j'ai eu du mal à faire fonctionner Memcached et le plugin memcache php sur mon serveur local. Avant d'installer memcached et le plugin PHP memcache, j'obtiendrais cette erreur :

Erreur fatale : Classe 'Memcache' introuvable dans [Chemin]wp-content/object-cache.php à la ligne 350

Maintenant que j'ai memcached et le plugin PHP memcache installés (via Homebrew), j'obtiens une page "Aucune donnée reçue", et j'ai cette erreur dans mon journal d'erreurs Apache :

dyld: lieraison tardive des symboles échouée : Symbole introuvable : _mmc_queue_pop
  Référencé depuis : /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Attendu dans : espace de noms plat

dyld: Symbole introuvable : _mmc_queue_pop
  Référencé depuis : /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Attendu dans : espace de noms plat

[Sam 05 mai 16:38:27 2012] [notice] enfant pid 26491 signal de sortie Trace/BPT trap (5)

J'ai essayé de chercher ce pid dans le Moniteur d'activité en vain, et il change à chaque fois que j'essaie de charger la page. De plus, je ne trouve rien sur _mmc_queue_pop nulle part.

Je suis sous Mac OSX Lion, PHP ver 5.3.8, Memcached ver 1.4.13 et Memcache PHP plugin ver 3.0.6.

Est-ce que quelqu'un sait comment je peux résoudre ce problème ?

Merci !

1 votes

Reconstruisez memcached avec -fgnu89-inline dans CFLAGS/CXXFLAGS. Ce qui se passe, c'est que le mot-clé inline sous les nouvelles règles fait en sorte que _mmc_queue_pop s'incruste dans toutes les instances, ne laissant rien à memcache.so pour se lier dynamiquement.

0 votes

Comment pourrais-je modifier les CFLAGS/CXXFLAGS pour Homebrew ? Aurais-je besoin de modifier quelque chose dans le fichier Ruby Forumla ?

8voto

Muhammad Akhtar Points 32101

Comme David l'a mentionné dans les commentaires, lors de la construction du plugin memcache, PAS de memcached lui-même, vous devez ajouter exécution configure comme ceci :

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

Cela a parfaitement fonctionné pour moi.

2voto

dmh2000 Points 380

Je suggérerais en premier lieu de vérifier quel memcache.so est réellement lié. Sur Linux, vous utiliseriez ldd, sur OSX, ce devrait être otool -L si je me souviens bien. Il semble que le plugin récupère soit la mauvaise bibliothèque de memcache parmi plusieurs sur le système, soit une version incompatible.

0 votes

Je ne suis pas le plus fort dans ce genre de trucs. Que devrais-je faire exactement dans le Terminal pour y arriver?

1 votes

Je viens de voir que pour que otool soit disponible, vous pourriez avoir besoin d'installer les outils Xcode. Auquel cas, une page de manuel devrait être disponible. De toute façon, David a probablement déjà résolu le problème.

0 votes

J'ai la dernière version de Xcode installée, ainsi que les outils de ligne de commande. Comme je l'ai dit en commentaire sur la publication de David, je ne sais pas comment je suis censé implémenter ça. Est-ce que quelqu'un peut m'aider avec ça ?

2voto

wbit Points 21

Addendum - El Capitan, php56, php56-memcache 3.0.8

Après avoir lu les réponses de David Schwartz et CourtDemone, je n'ai toujours pas compris, jusqu'à ce que je lise cette réponse sur SO sur la façon de modifier une formule homebrew.

J'ai ajouté ce qui suit à la formule en exécutant brew edit php56-memcache et en collant les lignes suivantes:

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

0 votes

Merci! Une autre référence : github.com/Homebrew/homebrew-php/issues/2529

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X