Я пытаюсь скомпилировать libmemcached (1.0.7) на CentOS6 и получаю следующее предупреждение:
...
checking for event.h... no
configure: WARNING: Unable to find libevent
...
Я вручную скомпилировал libevent (2.0.19) и построил его, используя следующую строку конфигурации:
OPTIONS="--prefix=/usr/local/_custom/app/libevent"
Все скомпилировано и установлено нормально, но я не мог понять, как сделать так, чтобы система знала, что файлы lib находятся в пользовательском /usr/local/_custom/app/libevent/lib
реж. Я наткнулся на статья и прочтите, что я могу сообщить системе о пользовательских путях к библиотекам, добавив собственный файл в /etc/ld.so.conf.d/
каталог:
# /etc/ld.so.conf.d/customApp.conf
/usr/local/_custom/app/libevent/lib
Затем я выпустил ldconfig
командование и смог подтвердить, что libevent
был включен с помощью этой команды:
ldconfig -p | ack -i libevent
Увидев, что libevent теперь включен в вывод ldconfig, я решил, что смогу скомпилировать libmemcached и удовлетворить вышеупомянутое предупреждение. К сожалению, этого не произошло. Поэтому я еще раз взглянул на ldconfig
вывод и заметил это:
libevent_pthreads-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_pthreads-2.0.so.5
libevent_openssl-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_openssl-2.0.so.5
libevent_extra-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_extra-2.0.so.5
libevent_core-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_core-2.0.so.5
libevent-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent-2.0.so.5
Ссылки на базовые ссылки отсутствуют, например, я ожидаю увидеть ссылки на эти (ls -la /usr/local/_custom/app/libevent/lib
):
libevent.so -> libevent-2.0.so.5.1.7
libevent_openssl.so -> libevent_openssl-2.0.so.5.1.7
libevent_core.so -> libevent_core-2.0.so.5.1.7
Значит, либо я делаю что-то не так, либо система все еще не знает, где искать libevent.so
.
- Обновление №1 -
Мне не удалось заставить libmemcached скомпилировать без предупреждения, даже после попытки скомпилировать с помощью следующей команды configure:
./configure --prefix=/usr/local/_custom/app/libmemcached CFLAGS="-I/usr/local/_custom/app/libevent/include" LDFLAGS="-L/usr/local/_custom/app/libevent/lib"
Я был уверен, что это сработает, потому что я напрямую передаю директории include и lib команде configure. Но этого не произошло.
Сначала извините за мой английский. моя ОС: CentOS 6.3 mini без рабочего стола x86_64, у меня нет yum install libevent, я много раз сталкивался с одной и той же проблемой в разных средах. Вот мой процесс установки libevent:
tar zxvf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20-stable
./configure --prefix=/usr/local/libevent
make
make install
перед установкой libmemcached-1.0.10 я попробовал
./configure --prefix=/usr/local/libmemcached --with-lib-prefix=/usr/local/libevent --with-memcached=/usr/local/bin/
и
LIBEVENT_CPPFLAGS=/usr/local/libevent/include
LIBEVENT_LDFLAGS=/usr/local/libevent/lib
проблема тоже случилась. тогда я делаю ссылку, как здесь:
ln -s /usr/local/libevent/include/* /usr/include/
ln -s /usr/local/libevent/lib/libevent* /usr/lib64/
это сделано! Я думаю, что libmemcached находит libevent.so и event.h имеет жесткий код. Желаю, чтобы мое решение могло помочь вам.
Я собирался предложить установить libevent-devel
пакет в системе. Это предоставит файл заголовка, указанный в опубликованной вами ошибке, но версия может быть старше (1.4.13-1), чем та, которая вам нужна для вашего libmemcached
.
Глядя на вашу последовательность, я бы рекомендовал удалить config.cache
файл в вашем libmemcached
исходный каталог, затем перезапустите ./configure
для libmemcached
. Это должно позволить процессу распознавать изменения, внесенные вами в пути поиска библиотеки.
У меня была такая же проблема, и я собирался отказаться от libmemcached, когда заметил, что флаг конфигурации должен быть
CPPFLAGS="-I/usr/local/_custom/app/libevent/include"
вместо того
CFLAGS="-I/usr/local/_custom/app/libevent/include"
Поговорив с несколькими опытными сисадминами с работы, я решил просто yum install memcached
. Как и в случае с CentOS, одним из компромиссов является работа со старыми версиями приложений / библиотек, но специалисты по сопровождению CentOS будут вносить исправления безопасности и т. Д., Поэтому я решил, что просто выберу исходную версию и избавлю себя от головной боли.
Что ж, у меня нет правильного ответа, но я заметил, когда мой только что скомпилированный tmux на CentOS сказал мне
tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
Я попробовал это, и это сработало:
LD_LIBRARY_PATH=/usr/local/lib tmux
Я не уверен, что это за канонический / стандартный способ установки системного LD_LIBRARY_PATH, но он не кажется «ужасным» сам по себе, если я вставлю его в bashrc / zshrc.
Редактировать: Ах, Вот это один из ответов, который поясняет способ сообщить вашей системе, где находятся библиотеки.