Почему gcc не может найти libevent при сборке tmux из исходного кода?

68

Я хочу установить tmux на компьютер, на котором у меня нет прав root. Я уже скомпилировал libevent и установил его, $HOME/.bin-libeventи теперь я хочу скомпилировать tmux, но настройка всегда заканчивается configure: error: "libevent not found", хотя я пытался указать на каталог libevent в Makefile.am, изменив LDFLAGSи CPPFLAGS, но, похоже, ничего не работает.

Как я могу сказать системе искать в моем домашнем каталоге файл libevent?

Volker
источник
Альтернатива - исследовать дтач . Удобно, когда вы хотите отсоединить сеансы, но не имеете root и не имеете времени для статической компиляции tmux.
Соня Гамильтон
Если вы используете RHEL 6.x, в репозитории есть предварительно скомпилированный tmux.
Чили

Ответы:

63

Пытаться:

DIR="$HOME/.bin-libevent"
./configure CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"

(Я уверен, что должен быть лучший способ настроить пути к библиотекам с помощью autoconf. Обычно есть --with-libevent=dirопция. Но здесь, кажется, такой опции нет.)

Стефан Хименес
источник
4
Это подход, который заставил makeнаконец работать. Я попытался установить другие переменные окружения и установить prefixи exec-prefix, но, как только я включил эти флаги, они действительно были собраны.
wizonesolutions
Как мне указать несколько каталогов для флагов? Я пытался, ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"но безуспешно
lucaswxp
1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Кусалананда
Я использовал этот ответ и libevent not foundошибка ушла, но теперь я получаю то же самое с ncurses: curses not found. Мои, libeventа также ncursesустановки находятся в$HOME/.local/
Аалок
Для libevent, используйте LIBEVENT_CFLAGSи LIBEVENT_LIBSвместо CFLASGи LDFLAGS. Для ncurseиспользования LIBTINFO_CFLAGSи LIBTINFO_LIBS@Aalok
Jongsu Liam Kim
9

У меня была похожая проблема, и я обнаружил, что после запуска sudo yum install libevent-develя смог успешно создать и установить tmux.

РЕДАКТИРОВАТЬ: Если вы устанавливаете это на компьютере Red Hat, вам также необходимо посетить выбор каналов для вашего сервера в сети Red Hat Network и добавить дополнительный канал RHEL Server. Это даст вам доступ к пакетам -devel для libevent (базовый и дополнительный каналы не предоставляют его).

Snap Shot
источник
3
Это был бы нормальный способ исправить это, но в данном случае это была «машина, к которой у меня нет root-доступа»
Майкл Мрозек
Это помогло мне. Я не был root и не установил библиотеку devel.
полим
где вы берете библиотеку devel в виде tar-файла?
arrowill12
1
для моей машины fedora мне также потребовалось sudo yum установить ncurses-devel помимо sudo yum install libevent-devel
Мустакимур Рахман
6

У меня была та же проблема с RHEL 5.4, и я обнаружил, что libevent установлен, но нет символической ссылки libevent.so, только реальная версия библиотеки:

/usr/lib64/libevent-1.1a.so.1
/usr/lib64/libevent-1.1a.so.1.0.2

Таким образом, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.soработает довольно хорошо для меня без необходимости устанавливать или изменять что-либо. Понятия не имею, почему свободный RPM RedHat не создал символическую ссылку. Может быть, ошибка, чтобы сообщить?

Но сейчас жалуюсь на это error: event.h: No such file or directory.

CEPAL
источник
У меня точно такие же ошибки: error: event.h: No such file or directory.
gkb0986
Я на RHEL 6, и я только что скачал и скомпилировал libevent, установив его в папку пользователя. Затем я использовал трюк @ Stéphane Gimenez выше, чтобы собрать его. Для того, чтобы получить это работает, псевдонимы I с LD_PRELOAD трюка дается @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Работает как шарм!
csl
1
Если вы обнаружите, что возитесь с символическими ссылками или копируете их вручную в системных каталогах, то есть лучший способ сделать это.
Кусалананда
3

Перед настройкой и компиляцией tmux (или любой другой программы) вы должны сообщить ему, где он может найти нужные библиотеки. Если вы установили какую-то библиотеку в нестандартном месте, вы можете использовать переменную среды, LD_LIBRARY_PRELOADчтобы указать, где расположены некоторые библиотеки.

Я твой случай:

$ export LD_LIBRARY_PRELOAD=$HOME/.bin-libevent/lib

А затем продолжите настройку / компиляцию.

Позже, двоичному файлу также нужно будет знать, где можно найти ваши дополнительные библиотеки, поэтому вам нужно будет поместить exportоператор в ваш .bashrc(если bash - это ваша оболочка входа в систему).

rozcietrzewiacz
источник
Спасибо, но, к сожалению, это не работает, то же сообщение об ошибке. Номер версии libevent-2.0.12, который должен работать
volker
Тогда кажется, что есть проблема с вашей компиляцией libevent. Что find .bin-libevent -name 'libevent.so*'показывает?
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'находит.bin-libevent/lib/libevent.so
Фолькер
:) Тогда вы должны указать на каталог $HOME/.bin-libevent/lib(обновленный ответ)
rozcietrzewiacz
Да, я боюсь, что я уже попробовал это, все еще без изменений. Я довольно озадачен и расстроен.
Фолькер
1

Суть есть на https://gist.github.com/ryin/3106801 :

#!/bin/bash

# Script for installing tmux on systems where you don't have root access.
# tmux will be installed in $HOME/local/bin.
# It's assumed that wget and a C/C++ compiler are installed.

# exit on error
set -e

TMUX_VERSION=1.8

# create our directories
mkdir -p $HOME/local $HOME/tmux_tmp
cd $HOME/tmux_tmp

# download source files for tmux, libevent, and ncurses
wget -O tmux-${TMUX_VERSION}.tar.gz http://sourceforge.net/projects/tmux/files/tmux/tmux-${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz/download
wget https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz
wget ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz

# extract files, configure, and compile

############
# libevent #
############
tar xvzf libevent-2.0.19-stable.tar.gz
cd libevent-2.0.19-stable
./configure --prefix=$HOME/local --disable-shared
make
make install
cd ..

############
# ncurses  #
############
tar xvzf ncurses-5.9.tar.gz
cd ncurses-5.9
./configure --prefix=$HOME/local
make
make install
cd ..

############
# tmux     #
############
tar xvzf tmux-${TMUX_VERSION}.tar.gz
cd tmux-${TMUX_VERSION}
./configure CFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-L$HOME/local/lib -L$HOME/local/include/ncurses -L$HOME/local/include"
CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make
cp tmux $HOME/local/bin
cd ..

# cleanup
rm -rf $HOME/tmux_tmp

echo "$HOME/local/bin/tmux is now available. You can optionally add $HOME/local/bin to your PATH."
Serv-вкл
источник
1
У меня также были curses, установленные в пользовательское место (я не администратор в целевой системе), и я не осознавал, что он устанавливает себя в ncursesподкаталог любого указанного пути include / library. Странный выбор дизайна. Это исправило это для меня.
wbadart
0

У меня та же проблема, и кажется, что самый голосующий ответ не сработал для меня. Я использую рабочую станцию ​​Fedora 22. Вот что я сделал, чтобы это исправить: 1. Установить libevent-develпакет. 2. Установить ncurses-develпакет

$ dnf install libevent-devel`
$ dnf install ncurses-devel

Первый из них не решит никаких event.hпроблем, а второй решит, не может найти проблему проклятий. Кстати, метод softlink выше также работает для меня во время ./configure.

Цянь Чжан
источник
Не уверен, почему за это проголосовали. Это исправило проблему для меня в системе CentOS.
Дарм
0

Принятый ответ хорош, но по крайней мере в tmux 2.8 есть поддержка для определения местоположения libevent с помощью переменных среды.

Сначала установите libevent в нужном месте. Я использовал cmake, потому что у меня была проблема с autoconf

cmake -DCMAKE_INSTALL_PREFIX=$HOME/usr ..
make install

Затем соберите и установите tmux:

export LIBEVENT_CFLAGS=-I${HOME}/usr/include 
export LIBEVENT_LIBS="-L${HOME}/usr/lib -levent" 
./configure --prefix=$HOME/usr
make install

LIBEVENT_CFLAGSПереопределения переменных среды pkg-configвключают в себя параметры libevent и LIBEVENT_LIBSпереопределяют параметры флага компоновщика.

Габриэль Южный
источник
-3

В CentOS 6 скомпилируйте и установите libevent в /opt/libeventкаталоге с помощью команды:

# ./configure --prefix=/opt/libevent
# make
# make install

Затем установите мое приложение (в данном случае это был PgBouncer)

# ./configure --prefix=/opt/ *--with-libevent=/opt/libevent/*

Вы можете изменить каталоги, где вы хотите.

Cepxio
источник