web-dev-qa-db-fra.com

Pourquoi gcc ne peut-il pas trouver libevent lors de la construction de tmux à partir de la source?

Je veux installer tmux sur une machine où je n'ai pas d'accès root. J'ai déjà compilé libevent et l'ai installé dans $HOME/.bin-libevent et maintenant je veux compiler tmux, mais la configuration se termine toujours par configure: error: "libevent not found", même si j'ai essayé de pointer vers le répertoire libevent dans le Makefile.am en modifiant LDFLAGS et CPPFLAGS, mais rien ne semble fonctionner.

Comment puis-je dire au système de rechercher dans mon répertoire personnel le libevent?

68
volker

Essayer:

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

(Je suis sûr qu'il doit y avoir un meilleur moyen de configurer les chemins de bibliothèque avec autoconf. Habituellement, il y a un --with-libevent=dir option. Mais ici, il semble qu'il n'y ait pas une telle option.)

64
Stéphane Gimenez

J'avais un problème similaire et j'ai découvert qu'après avoir exécuté Sudo yum install libevent-devel J'ai réussi à créer et à installer tmux.

EDIT: Si vous installez ceci sur une machine Red Hat, vous devrez également visiter la sélection des canaux pour votre serveur sur le réseau Red Hat et ajouter le canal facultatif du serveur RHEL. Cela vous donnera accès aux packages -devel pour libevent (les canaux de base et supplémentaires ne le fournissent pas).

9
Snap Shot

J'ai eu le même problème sur RHEL 5.4 et j'ai trouvé que libevent est installé mais il n'y a pas de lien symbolique libevent.so, seulement la version réelle de la bibliothèque:

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

Donc, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so fonctionne assez bien pour moi sans avoir besoin d'installer ou de modifier quoi que ce soit. Aucune idée pourquoi le rpm libevent de RedHat n'a pas créé le lien symbolique. Peut-être un bug à signaler?

Mais maintenant, il se plaint de ceci: error: event.h: No such file or directory.

6
cepal

Avant la configuration et la compilation de tmux (ou de tout programme), vous devez lui dire où il peut trouver les bibliothèques dont il a besoin. Si vous avez installé une bibliothèque dans un emplacement non standard, vous pouvez utiliser la variable d'environnement LD_LIBRARY_PRELOAD pour savoir où se trouvent certaines bibliothèques.

Je votre cas:

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

Et puis continuez avec la configuration/compilation.

Plus tard, le binaire devra également savoir où se trouvent vos bibliothèques supplémentaires, vous devrez donc placer l'instruction export dans votre .bashrc (si bash est votre shell de connexion).

3
rozcietrzewiacz

Il y a un Gist à 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 réponse acceptée est bonne, mais à partir d'au moins tmux 2.8, il est possible de spécifier l'emplacement de libevent à l'aide de variables d'environnement.

Installez d'abord libevent à l'emplacement souhaité. J'ai utilisé cmake parce que j'avais un problème avec autoconf

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

Ensuite, construisez et installez tmux:

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

La variable d'environnement LIBEVENT_CFLAGS remplace pkg-config inclut les paramètres de libevent et LIBEVENT_LIBS remplace les paramètres d'indicateur de l'éditeur de liens.

0
Gabriel Southern

J'ai le même problème et il semble que la réponse la plus positive n'ait pas fonctionné pour moi. J'utilise Fedora 22 Workstation. Voici ce que j'ai fait pour résoudre ce problème: 1. Installez libevent-devel paquet. 2. Installez ncurses-devel paquet

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

Le premier ne résoudra pas event.h le problème et le second résoudra ne peuvent pas trouver le problème des malédictions. BTW, la méthode softlink ci-dessus fonctionne également pour moi pendant ./configure.

0
Qian Zhang