Настройка memcached для lampp в linux с помощью pecl

ИСХОДНОЕ СООБЩЕНИЕ

Прежде всего, я хочу установить memcached, а не memcache.

Я пытаюсь настроить memcached для работы с моим сервером lampp на Ubuntu 12.10 со вчерашнего дня. Я уже следовал почти каждому учебнику, который мог найти. Последнее, что я пытался сделать, это:

в терминале

apt-get install libmemcached-dev 
cd /opt/lampp
./bin/pecl install memcached

а затем добавить extension="memcached.so" в файл php.ini. После этого я перезапустил lampp, используя /opt/lampp/lampp restart

Когда я попытался открыть php-скрипт в своем браузере, он только что был загружен. Запуск tail -20 /opt/lampp/logs/php_error_logэто то, что я вижу:

PHP Warning:  PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so' - /opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so: wrong ELF class: ELFCLASS64 in Unknown on line 0

Кажется, у этого парня была такая же проблема, но с другим расширением. Когда я пытаюсь скомпилировать 32-битную версию расширения, используя:

phpize
CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure
make

Но make выдает следующую ошибку:

/usr/bin/ld: skipping incompatible /usr/local/lib/libmemcached.so when searching for -lmemcached
/usr/bin/ld: cannot find -lmemcached
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
make: *** [memcached.la] Error 1

Проблема в том, что я даже не знаю, на правильном ли я пути. Если бы кто-то мог написать краткое пошаговое руководство, как заставить это работать, или просто показать мне, в чем проблема, было бы здорово.

ОБНОВЛЕНИЕ

После выполнения sudo dpkg --add-architecture i386 sudo apg-get update sudo apt-get install libmemcached-dev:i386 libz-dev:i386 и phpize CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32 ./configure make memcached компилируется нормально. Однако это все еще не работает. После повторной проверки журналов ошибок php я получаю это

PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so' - /opt/lampp/lib/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/i386-linux-gnu/libstdc++.so.6) in Unknown on line 0

person Žan Kusterle    schedule 23.12.2012    source источник
comment
Возможно, версия установленной вами библиотеки libmemcached только 64-битная?   -  person Charles    schedule 23.12.2012


Ответы (2)


Вы на правильном пути - ваша лампа 32-битная, а остальная система (я полагаю) 64-битная. Итак, когда вы установили libmemcached, скомпилированный php-libmemcached является 64-битной версией. Вот почему вы получаете ошибку «Неправильный класс ELF».

Прежде чем вы сможете скомпилировать 32-битную версию php-memchached, вам необходимо установить 32-битные версии libmemcached и libz (и их заголовки).

Вам необходимо: sudo dpkg --add-architecture i386 sudo apg-get update sudo apt-get install libmemcached-dev:i386 libz-dev:i386

Я думаю, этого должно быть достаточно, чтобы вы могли скомпилировать 32-битную версию php-libmemcached.

person Raber    schedule 23.12.2012
comment
Мне удалось скомпилировать memcached, и теперь я получаю другую ошибку в журналах php: Запуск PHP: невозможно загрузить динамическую библиотеку '/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/memcached.so' - /opt/lampp/lib/libgcc_s.so.1: версия `GCC_4.2.0' не найдена (требуется /usr/lib/i386-linux-gnu/libstdc++.so.6) в Unknown в строке 0 - person Žan Kusterle; 23.12.2012
comment
Думаю, мне следует установить более старую версию компилятора, но как это сделать? Например, apt-get install g++-4.2.0 не работает. Я знаю, что я новичок... - person Žan Kusterle; 23.12.2012
comment
эту ошибку я не понимаю :( Кстати, вы можете сказать, почему ваш php 32-битный? - person Raber; 23.12.2012
comment
Я не думаю, что на данный момент существует 64-битная версия xampp. - person Žan Kusterle; 23.12.2012

Есть грязный способ решить вашу проблему

go to /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.x.x

и скопировал libgcc_s.so в

/opt/lampp/lib и переименовал его в libgcc_s.so.1, чтобы перезаписать предыдущий файл.

person Satish    schedule 28.12.2012
comment
Спасибо, это работает! Я назначил вам награду, но принял ответ Рабера, так как хочу, чтобы вы оба получили некоторую репутацию. - person Žan Kusterle; 29.12.2012