Problemas com o memcache.so


8

Me pediram para lançar um site que outra pessoa criou. É um site de loja do Wordpress que precisa do Memcached para rodar, e eu estou tendo problemas para fazer com que o Memcached e o plugin php do memcache funcionem no meu servidor local. Antes de instalar o memcached e o plugin PHP do memcache, eu receberia este erro:

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

Agora que eu tenho o memcached e o plugin PHP do memcache instalado (via Homebrew), recebo uma página "Nenhum dado recebido" e recebo esse erro no meu log de erros do 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)

Tentei procurar esse pid no Activity Monitor sem sucesso e ele muda toda vez que tento carregar a página. Além disso, não consigo encontrar nada sobre _mmc_queue_pop em nenhum lugar.

Estou executando o Mac OSX Lion, PHP ver 5.3.8, Memcached ver 1.4.13 e Memcache PHP plugin ver 3.0.6.

Alguém sabe como eu posso consertar isso?

Obrigado!


1
Reconstrua o memcached com -fgnu89-inlineem CFLAGS/ CXXFLAGS. O que acontece é que a inlinepalavra - chave sob novas regras faz _mmc_queue_popcom que seja incorporada em todas as instâncias, não deixando nada para memcache.sovincular dinamicamente.
David Schwartz

Como posso editar o CFLAGS / CXXFLAGS for Homebrew? Preciso modificar algo no arquivo Ruby Forumla?
CourtDemone

Respostas:


8

Como David mencionou nos comentários, ao criar o plug-in memcache, NÃO o próprio memcached, você deve adicionar run configurecomo este:

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

Isso funcionou perfeitamente para mim.


2

Eu sugeriria como primeiro passo garantir que o memcache.so esteja realmente vinculado. No Linux você usaria ldd, no OSX deveria ser otool -LIIRC. Parece que o plug-in se apossou da biblioteca incorreta de várias bibliotecas de memcache no sistema ou de uma versão incompatível.


Eu não sou o mais forte nesse tipo de coisa. O que exatamente eu teria que fazer no terminal para fazer isso?
CourtDemone

1
Vejo apenas que, para otool estar disponível, você pode precisar das ferramentas do Xcode instaladas. Nesse caso, uma página de manual deve estar disponível. De qualquer forma, David provavelmente já tem o problema resolvido.
Rackandboneman

Eu tenho a versão mais recente do Xcode instalada, junto com as ferramentas de linha de comando. Como eu disse no comentário ao post de David, não sei como devo implementá-lo. Alguém pode me ajudar com isso?
CourtDemone

1
Consulte a documentação do Homebrew (se é também de onde o seu memcache também é) sobre como definir "opções de configuração" e CFLAGS. Eu sugiro que você mexa apenas com CFLAGS se não houver uma "opção de configuração" disponível. Não estou familiarizado com o homebrew para dar conselhos sobre livros de receitas, e conselhos genéricos supondo que um ciclo de instalação "./configure --options && make && make install" possa ser enganoso. Ainda assim, a familiaridade com o mesmo ciclo é EXTREMAMENTE útil quando você estiver mexendo com QUALQUER sistema de criação de fontes.
Rackandboneman

Preciso de alguém que esteja mais familiarizado com o Homebrew. Tentei adicionar linhas CFLAGS à fórmula de instalação do memcached e ela não foi instalada corretamente.
CourtDemone

2

Adendo - El Capitan, php56, php56-memcache 3.0.8

Depois de ler as respostas de David Schwartz e CourtDemone, ainda não recebi, até ler esta resposta no SO sobre como editar uma fórmula caseira.

Adicionei o seguinte à fórmula executando brew edit php56-memcachee colando nas seguintes linhas:

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

Obrigado! Também uma outra referência: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.