it-swarm-ru.tech

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

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

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

68
volker

Пытаться:

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

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

64
Stéphane Gimenez

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

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

9
Snap Shot

У меня была та же проблема с 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.

6
cepal

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

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

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

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

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

3
rozcietrzewiacz

Суть есть в 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."
1
serv-inc

Принятый ответ хорош, но по крайней мере в 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 переопределяет настройки флага компоновщика.

0
Gabriel Southern

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

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

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

0
Qian Zhang