Question Problèmes avec memcache.so


On m'a demandé de lancer un site créé par quelqu'un d'autre. C'est un site de boutique Wordpress qui a besoin de Memcached pour fonctionner, et j'ai eu du mal à obtenir Memcached et le plugin memcache php sur mon serveur local. Avant d’installer memcached et le plugin PHP memcache, j’obtenais cette erreur:

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

Maintenant que j’ai memcached et que le plugin memcache PHP est installé (via Homebrew), je reçois une page intitulée «Aucune donnée reçue» et j’obtiens cette erreur dans mon journal d’erreur 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)

J'ai essayé de chercher ce pid dans Activity Monitor sans succès, et il change chaque fois que j'essaie de charger la page. De plus, je ne trouve rien sur _mmc_queue_pop nulle part.

J'utilise Mac OSX Lion, PHP version 5.3.8, Memcached version 1.4.13 et le plugin Memcache PHP version 3.0.6.

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

Merci!


8
2018-05-05 23:45


origine


Reconstruire memcached avec -fgnu89-inline dans CFLAGS/CXXFLAGS. Qu'est-ce qui se passe est le inline mot-clé sous nouvelles règles causes _mmc_queue_pop à en ligne dans tous les cas, ne laissant rien pour memcache.so relier dynamiquement à. - David Schwartz
Comment puis-je modifier les fichiers CFLAGS / CXXFLAGS pour Homebrew? Aurais-je besoin de modifier quelque chose dans le fichier Ruby Forumla? - CourtDemone


Réponses:


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

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

Cela a parfaitement fonctionné pour moi.


8
2018-05-10 23:46





Je suggèrerais, dans un premier temps, de s’assurer que le memcache.so est vraiment lié. Sur Linux, vous utiliseriez ldd, sur OSX il devrait être otool -L IIRC. Cela ressemble à ce que le plugin trouve la mauvaise parmi plusieurs bibliothèques memcache sur le système ou une version incompatible.


2
2018-05-06 00:06



Merci pour otool -L. - wfaulk
Je ne suis pas le plus fort dans ce genre de choses. Qu'est-ce que je devrais faire exactement dans le terminal pour faire cela? - CourtDemone
Je viens de voir que pour qu'otool soit disponible, vous aurez peut-être besoin des outils Xcode installés. Dans ce cas, une page de manuel devrait être disponible. De toute façon, David a probablement déjà résolu le problème. - rackandboneman
J'ai installé la dernière version de Xcode, ainsi que des outils de ligne de commande. Comme je l'ai dit dans un commentaire sur le message de David, je ne sais pas comment je suis censé mettre cela en œuvre. Quelqu'un peut-il m'aider avec ça? - CourtDemone
Consultez la documentation de Homebrew (si c'est de là que vient également votre memcache) pour savoir comment définir les "options de configuration" et CFLAGS. Je vous suggère de jouer avec CFLAGS uniquement s’il n’existe pas «d’option de configuration». Je ne connais pas trop l'homebrew pour donner des conseils de livre de recettes, et des conseils génériques supposant qu'un cycle d'installation "./configure --options && make && make install" pourraient être trompeurs. Néanmoins, la connaissance du même cycle est extrêmement utile lorsque vous manipulez N'IMPORTE QUEL système de génération de source. - rackandboneman


Addendum - El Capitan, php56, php56-memcache 3.0.8

Après avoir lu les réponses de David Schwartz et CourtDemone, je ne l’avais toujours pas comprise, 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 lançant brew edit php56-memcache et coller dans 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"

2
2017-10-29 04:58



Merci! Aussi une autre référence: github.com/Homebrew/homebrew-php/issues/2529 - Pedro Casado