Dlaczego gcc nie może znaleźć libevent podczas budowania tmux ze źródła?

68

Chcę zainstalować tmux na komputerze, na którym nie mam dostępu do roota. Już skompilowałem libevent i zainstalowałem go, $HOME/.bin-libeventa teraz chcę skompilować tmux, ale konfiguracja zawsze kończy się na configure: error: "libevent not found", mimo że próbowałem wskazać katalog libevent w Makefile.ammodyfikując LDFLAGSi CPPFLAGS, ale nic nie działa.

Jak mogę powiedzieć systemowi, aby szukał libevent w moim domowym katalogu?

volker
źródło
Alternatywą jest zbadanie dtach . Przydaje się, gdy chcesz odłączalne sesje, ale nie masz roota i nie masz czasu na statyczne kompilowanie tmux.
Sonia Hamilton,
Jeśli korzystasz z RHEL 6.x, w repozytoriach znajduje się wstępnie skompilowany tmux.
Chili,

Odpowiedzi:

63

Próbować:

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

(Jestem pewien, że musi istnieć lepszy sposób konfigurowania ścieżek bibliotek za pomocą autoconf. Zwykle jest --with-libevent=diropcja. Ale tutaj wydaje się, że nie ma takiej opcji).

Stéphane Gimenez
źródło
4
To podejście sprawiło, że w makekońcu zadziałało. Próbowałem ustawić inne zmienne środowiskowe i ustawienia prefixi exec-prefix, ale kiedy już załączyłem te flagi, rzeczy faktycznie powstały.
wizonesolutions,
Jak mógłbym zająć się określaniem wielu katalogów dla flag? Próbowałem, ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"ale bez powodzenia
lucaswxp
1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda
Kiedyś tę odpowiedź i libevent not foundbłąd odszedł, ale teraz mam to samo z ncurses: curses not found. Zarówno moja, libeventjak i ncursesinstalacje są w$HOME/.local/
Aalok
Do libevent, użyj LIBEVENT_CFLAGSi LIBEVENT_LIBSzamiast CFLASGi LDFLAGS. For ncurse, use LIBTINFO_CFLAGSi LIBTINFO_LIBS@Aalok
Jongsu Liam Kim
9

Miałem podobny problem i odkryłem, że po uruchomieniu sudo yum install libevent-develmogłem z powodzeniem utworzyć i zainstalować tmux.

EDYCJA: Jeśli instalujesz to na maszynie Red Hat, musisz także odwiedzić wybór kanałów dla swojego serwera w sieci Red Hat Network i dodać opcjonalny kanał RHEL Server. To da ci dostęp do pakietów -devel dla libevent (nie zapewniają go kanały podstawowe i dodatkowe).

Snap Shot
źródło
3
Byłby to normalny sposób, aby to naprawić, ale w tym przypadku był to „komputer, na którym nie mam dostępu do konta root”
Michael Mrozek
To mi pomogło. Nie byłem rootem i nie zainstalowałem biblioteki devel.
polim
skąd bierzesz lib devel jako plik tar?
arrowill12
1
na mojej maszynie fedora musiałem także zainstalować sudo yum ncurses-devel oprócz sudo yum zainstalować libevent-devel
Mustakimur Rahman
6

Miałem ten sam problem na RHEL 5.4 i faktycznie znalazłem libevent jest zainstalowany, ale nie ma dowiązania symbolicznego libevent.so, tylko prawdziwa wersja biblioteki:

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

Więc ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.sodziała całkiem dobrze dla mnie bez potrzeby instalowania lub zmieniania czegokolwiek. Nie mam pojęcia, dlaczego libevent rpm RedHata nie utworzył dowiązania symbolicznego. Może błąd do zgłoszenia?

Ale teraz, to podbiega do tego: error: event.h: No such file or directory.

cepal
źródło
Mam dokładnie taki sam błąd: error: event.h: No such file or directory.
gkb0986,
Korzystam z RHEL 6 i właśnie pobrałem i skompilowałem libevent, instalując go w folderze użytkownika. Potem użyłem powyższej sztuczki @ Stéphane Gimenez, aby ją skompilować. Aby to działa, i pseudonimy z sztuczki LD_PRELOAD podanej przez @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Działa jak marzenie!
csl
1
Jeśli masz problemy z łączami symbolicznymi lub ręcznie kopiujesz pliki w katalogach systemowych, istnieje lepszy sposób na zrobienie tego.
Kusalananda
3

Przed konfiguracją i kompilacją tmux (lub dowolnego programu) musisz powiedzieć mu, gdzie może znaleźć potrzebne biblioteki. Jeśli zainstalowałeś bibliotekę w niestandardowej lokalizacji, możesz użyć zmiennej środowiskowej, LD_LIBRARY_PRELOADaby określić, gdzie znajdują się niektóre biblioteki.

Ja twoja sprawa:

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

Następnie przejdź do konfiguracji / kompilacji.

Później plik binarny będzie również musiał wiedzieć, gdzie można znaleźć twoje dodatkowe biblioteki, więc musisz umieścić exportinstrukcję w swoim .bashrc(jeśli bash jest twoją powłoką logowania).

rozcietrzewiacz
źródło
Dzięki, ale niestety to nie działa, ten sam komunikat o błędzie. Numer wersji to libevent-2.0.12, który powinien działać
volker
Wygląda na to, że jest problem z twoją libeventową kompilacją. Co find .bin-libevent -name 'libevent.so*'pokazuje
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'znaleziska.bin-libevent/lib/libevent.so
volker,
:) Następnie należy wskazać katalog $HOME/.bin-libevent/lib(zaktualizowano odpowiedź)
rozcietrzewiacz
Tak, obawiam się, że już tego spróbowałem, wciąż bez zmian. Jestem dość zdziwiony i sfrustrowany.
volker,
1

Jest sedno na 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-inc
źródło
1
Miałem również zainstalowane klątwy w niestandardowej lokalizacji (nie jestem administratorem w systemie docelowym) i nie zdawałem sobie sprawy, że instaluje się w ncursespodkatalogu dowolnej podanej ścieżki dołączania / biblioteki. Dziwny wybór projektu. Naprawiłem to dla mnie.
wbadart
0

Mam ten sam problem i wydaje się, że najbardziej pozytywna odpowiedź nie zadziałała dla mnie. Używam stacji roboczej Fedora 22. Oto, co zrobiłem, aby to naprawić: 1. Zainstaluj libevent-develpakiet. 2. Zainstaluj ncurses-develpakiet

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

Pierwszy nie rozwiąże event.hproblemu, a drugi rozwiąże problem przekleństw. BTW, powyższa metoda softlink również działa dla mnie podczas ./configure.

Qian Zhang
źródło
Nie jestem pewien, dlaczego został odrzucony. Naprawiono problem dla mnie w systemie CentOS.
Dharmit
0

Przyjęta odpowiedź jest dobra, ale przynajmniej od wersji tmux 2.8 istnieje obsługa określania libevent położenia za pomocą zmiennych środowiskowych.

Najpierw zainstaluj libevent w wybranej lokalizacji. Użyłem cmake, ponieważ miałem problem z autoconf

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

Następnie skompiluj i zainstaluj tmux:

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

Zmienna środowiskowa LIBEVENT_CFLAGSnadpisuje pkg-configobejmują ustawienia libevent i LIBEVENT_LIBSnadpisuje ustawienia flag łącznikiem.

Gabriel Southern
źródło
-3

Na CentOS 6 skompiluj i zainstaluj libevent w /opt/libeventkatalogu za pomocą polecenia:

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

Następnie zainstaluj moją aplikację (w tym przypadku był to PgBouncer)

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

Możesz zmieniać katalogi gdziekolwiek chcesz.

Cepxio
źródło