it-swarm.it

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

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

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

68
volker

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'è un --with-libevent=dir opzione. Ma qui, sembra che non ci sia tale opzione.)

64

Stavo avendo un problema simile e ho scoperto che dopo aver eseguito Sudo yum install libevent-devel 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).

9
Snap Shot

Ho avuto lo stesso problema su RHEL 5.4 e in realtà ho scoperto 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

Così, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so funziona 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 si lamenta per questo: error: event.h: No such file or directory.

6
cepal

Prima della configurazione e della compilazione di tmux (o di qualsiasi programma) devi dirgli dove può trovare le librerie di cui ha bisogno. Se hai installato alcune librerie in una posizione non standard, puoi utilizzare la variabile ambientale LD_LIBRARY_PRELOAD per 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'istruzione export nel tuo .bashrc (se bash è la shell di accesso).

3
rozcietrzewiacz

C'è un Gist a 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

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_CFLAGS sostituisce pkg-config include le impostazioni per libevent e LIBEVENT_LIBS sovrascrive le impostazioni del flag del linker.

0
Gabriel Southern

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 libevent-devel pacchetto. 2. Installa ncurses-devel pacchetto

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

Il primo risolverà no event.h problema e il secondo risolverà non riesce a trovare il problema maledizioni. A proposito, il metodo sopra riportato funziona anche per me durante ./configure.

0
Qian Zhang