Назад | Перейти на главную страницу

CentOS 6 - Сообщите системе о пользовательских путях к библиотекам и об отсутствующих базовых ссылках.

Я пытаюсь скомпилировать 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.

Редактировать: Ах, Вот это один из ответов, который поясняет способ сообщить вашей системе, где находятся библиотеки.