Perché gcc non riesce a trovare libevent quando si crea tmux dal sorgente?


68

Voglio installare tmux su una macchina in cui non ho accesso root. Ho già compilato libevent e installato in $HOME/.bin-libevente ora voglio compilare tmux, ma configura sempre finisce con configure: error: "libevent not found", anche se ho provato a puntare alla directory libevent in Makefile.ammodificando LDFLAGSe CPPFLAGS, ma nulla sembra funzionare.

Come posso dire al sistema di cercare nella mia home directory il libevent?


Un'alternativa è investigare dtach . Comodo quando vuoi sessioni staccabili, ma non hai root e non hai tempo per compilare staticamente tmux.
Sonia Hamilton,

Se si utilizza RHEL 6.x, nei repository è presente un tmux precompilato.
Chili,

Risposte:


63

Provare:

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

(Sono sicuro che ci deve essere un modo migliore per configurare i percorsi delle librerie con autoconf. Di solito c'è --with-libevent=dirun'opzione. Ma qui, sembra che non ci sia tale opzione.)


4
Questo è l'approccio che ha fatto makefinalmente funzionare. Ho provato a impostare altre variabili di ambiente e impostazione prefixe exec-prefix, ma una volta inclusi questi flag, le cose sono state effettivamente costruite.
wizonesolutions,

Come farei per specificare più directory per i flag? Ho provato ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"ma senza successo
lucaswxp il

1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda

Ho usato questa risposta e l' libevent not founderrore è andato via, ma ora ottengo lo stesso con ncurses: curses not found. Sia la mia libeventche le ncursesinstallazioni sono entrambe in$HOME/.local/
Aalok il

Per libevent, utilizzare LIBEVENT_CFLAGSe LIBEVENT_LIBSinvece di CFLASGe LDFLAGS. Per ncurse, utilizzare LIBTINFO_CFLAGSe LIBTINFO_LIBS@Aalok
Jongsu Liam Kim il

9

Stavo avendo un problema simile e sudo yum install libevent-develho scoperto che dopo l'esecuzione sono stato in grado di creare e installare con successo tmux.

EDIT: se lo state installando su una macchina Red Hat, dovrete anche visitare la selezione dei canali per il vostro server su Red Hat Network e aggiungere il canale opzionale Server RHEL. Questo ti darà accesso ai pacchetti -devel per libevent (i canali base e supplementari non lo forniscono).


3
Questo sarebbe il modo normale per risolverlo, ma in questo caso era "una macchina in cui non ho accesso al root"
Michael Mrozek

Questo mi ha aiutato. Non ero root e non avevo installato la libreria di sviluppo.
polimero

dove ottieni lo sviluppo lib come file tar?
arrowill12

1
per la mia macchina fedora, ho anche richiesto di installare su ncurses-devel oltre a sudo yum installare libevent-devel
Mustakimur Rahman

6

Ho avuto lo stesso problema su RHEL 5.4 e in realtà ho trovato che libevent è installato ma non esiste alcun collegamento simbolico libevent.so, solo la versione reale della libreria:

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

Quindi, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.sofunziona abbastanza bene per me senza la necessità di installare o modificare nulla. Non ho idea del perché il rpm libevent di RedHat non abbia creato il collegamento simbolico. Forse un bug da segnalare?

Ma ora, è lamentarsi per questo: error: event.h: No such file or directory.


Ho ottenuto lo stesso errore esatto: error: event.h: No such file or directory.
gkb0986,

Sono su RHEL 6 e ho appena scaricato e compilato libevent, installandolo in una cartella utente. Quindi ho usato il trucco di @ Stéphane Gimenez sopra per farlo compilare. Per farlo funzionare, I alias con il LD_PRELOAD trick data dal @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Funziona come un fascino!
CSL

1
Se ti trovi a scherzare con i collegamenti simbolici o a copiare manualmente le cose nelle directory di sistema, allora c'è un modo migliore per farlo.
Kusalananda

3

Prima della configurazione e della compilazione di tmux (o di qualsiasi programma) devi dirgli dove può trovare le librerie di cui ha bisogno. Se alcune librerie sono state installate in una posizione non standard, è possibile utilizzare la variabile ambientale LD_LIBRARY_PRELOADper sapere dove si trovano alcune librerie.

Io il tuo caso:

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

E poi continua con la configurazione / compilazione.

In seguito, il binario dovrà anche sapere dove possono essere trovate le tue librerie aggiuntive, quindi dovrai inserire l' exportistruzione nella tua .bashrc(se bash è la tua shell di login).


Grazie, ma purtroppo non funziona, stesso messaggio di errore. Il numero di versione è libevent-2.0.12 che dovrebbe funzionare
volker

Quindi sembra che ci sia un problema con la tua compilation libevent. Cosa find .bin-libevent -name 'libevent.so*'mostra?
rozcietrzewiacz,

$ find .bin-libevent -name 'libevent.so*'trova.bin-libevent/lib/libevent.so
volker

:) Quindi dovresti puntare alla directory $HOME/.bin-libevent/lib(aggiornata la risposta)
rozcietrzewiacz

Sì, temo di aver già provato anche quello, ancora nessun cambiamento. Sono abbastanza perplesso e frustrato.
Volker

1

C'è un riassunto su 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
Avevo anche installato maledizioni in una posizione personalizzata (non sono un amministratore sul sistema di destinazione) e non mi rendevo conto che si installava nella ncursessottodirectory di qualsiasi percorso di inclusione / libreria specificato. Strana scelta di design. Questo mi ha risolto.
wbadart,

0

Ho lo stesso problema e sembra che la risposta più votata non abbia funzionato per me. Sto usando Fedora 22 Workstation. Ecco cosa ho fatto per risolvere questo problema: 1. Installa il libevent-develpacchetto. 2. Installa il ncurses-develpacchetto

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

Il primo risolverà nessun event.hproblema e il secondo risolverà non riesce a trovare il problema delle maledizioni. A proposito, il metodo softlink sopra funziona anche per me durante ./configure.


Non sono sicuro del perché sia ​​stato sottoposto a downgrade. Ha risolto il problema per me su un sistema CentOS.
Dharmit,

0

La risposta accettata è buona, ma almeno da almeno 2.8 esiste il supporto per specificare la posizione libevent usando le variabili di ambiente.

Prima installa libevent nella posizione desiderata. Ho usato cmake perché ho avuto un problema con autoconf

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

Quindi compilare e installare tmux:

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

La variabile di ambiente LIBEVENT_CFLAGSsostituisce pkg-configle impostazioni per libevent e LIBEVENT_LIBSsovrascrive le impostazioni del flag del linker.


-3

Su CentOS 6, compila e installa libevent nella /opt/libeventdirectory con il comando:

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

Quindi, installa la mia applicazione (in questo caso era PgBouncer)

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

Puoi cambiare le directory dove vuoi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.