Проблемы с memcache.so

8

Меня попросили запустить сайт, созданный кем-то другим. Это сайт магазина Wordpress, для работы которого требуется Memcached, и у меня были проблемы с запуском Memcached и плагином memcache php на моем локальном сервере. Перед установкой memcached и плагина PHP memcache я бы получил такую ​​ошибку:

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

Теперь, когда у меня есть memcached и установлен плагин memcache PHP (через Homebrew), я получаю страницу «Нет данных» и получаю эту ошибку в моем журнале ошибок 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)

Я пытался найти этот pid в Activity Monitor, но безрезультатно, и он меняется каждый раз, когда я пытаюсь загрузить страницу. Кроме того, я нигде не могу найти ничего о _mmc_queue_pop.

Я использую Mac OSX Lion, PHP версии 5.3.8, Memcached версии 1.4.13 и плагин Memcache PHP версии 3.0.6.

Кто-нибудь знает, как я могу это исправить?

Спасибо!

CourtDemone
источник
1
Перестроить Memcached с -fgnu89-inlineв CFLAGS/ CXXFLAGS. Что происходит, так это то, что inlineключевое слово в соответствии с новыми правилами приводит _mmc_queue_popк тому, что оно встроено во всех случаях, и ничего не остается для memcache.soдинамической ссылки.
Дэвид Шварц
Как я могу отредактировать CFLAGS / CXXFLAGS для Homebrew? Нужно ли что-то изменить в файле Ruby Forumla?
CourtDemone

Ответы:

8

Как отметил Дэвид в комментариях, при создании плагина memcache, а не memcached, вы должны добавить run configureследующим образом:

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

Это отлично сработало для меня.

CourtDemone
источник
2

В качестве первого шага я бы предложил убедиться, с чем действительно связан memcache.so. На Linux вы бы использовали ldd, на OSX это должен быть otool -LIIRC. Похоже, что плагин получает не ту или иную из нескольких библиотек memcache в системе, или несовместимую версию.

rackandboneman
источник
Я не самый сильный в такого рода вещах. Что именно мне нужно сделать в Терминале, чтобы сделать это?
CourtDemone
1
Я просто вижу, что для того, чтобы otool был доступен, вам могут понадобиться инструменты Xcode. В этом случае должна быть доступна справочная страница. В любом случае, у Дэвида, вероятно, уже есть проблема.
rackandboneman
У меня установлена ​​новейшая версия Xcode, а также инструменты командной строки. Как я сказал в комментарии к сообщению Дэвида, я не знаю, как я должен это реализовать. Кто-нибудь может мне помочь с этим?
CourtDemone
1
Обратитесь к документации Homebrew (если это также ваш memcache) о том, как установить «параметры конфигурации» и CFLAGS. Я предлагаю вам связываться с CFLAGS только в том случае, если фактически нет «опции конфигурации». Я слишком незнаком с homebrew, чтобы давать советы кулинарной книги, и общие советы, предполагающие, что цикл установки "./configure --options && make && make install" может вводить в заблуждение. Тем не менее, знакомство с тем же циклом ЧРЕЗВЫЧАЙНО полезно при работе с ЛЮБОЙ системой сборки исходного кода.
rackandboneman
Мне нужен кто-то, кто больше знаком с Homebrew. Я попытался добавить строки CFLAGS в формулу установки memcached, и она не установилась должным образом.
CourtDemone
2

Приложение - El Capitan, php56, php56-memcache 3.0.8

Прочитав ответы Дэвида Шварца и CourtDemone, я так и не получил его, пока не прочитал этот ответ на SO о том, как редактировать формулу домашнего приготовления.

Я добавил следующее в формулу, запустив brew edit php56-memcacheи вставив следующие строки:

   .  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
источник
Спасибо! Также еще одна ссылка: github.com/Homebrew/homebrew-php/issues/2529
Педро Касадо