Pourquoi gcc ne trouve-t-il pas libevent lors de la compilation de tmux depuis les sources?

68

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

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

Volker
la source
Une alternative est d’enquêter sur dtach . C'est pratique lorsque vous voulez des sessions détachables, mais vous n'avez pas de racine ni le temps de compiler statiquement tmux.
Sonia Hamilton
Si vous utilisez RHEL 6.x, il existe un tmux pré-compilé dans le dépôt.
Chili

Réponses:

63

Essayer:

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

(Je suis sûr qu'il doit exister un meilleur moyen de configurer les chemins de bibliothèque avec autoconf. Généralement, il existe une --with-libevent=diroption. Mais ici, il semble qu'il n'y en ait pas.)

Stéphane Gimenez
la source
4
C'est l'approche qui a makefinalement fait fonctionner. J'ai essayé de définir d' autres variables d'environnement et la mise prefixet exec-prefix, mais une fois que j'inclus ces drapeaux farcir réellement obtenu construit.
Wizonesolutions
Comment pourrais-je spécifier plus d'un répertoire pour les drapeaux? J'ai essayé ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"mais pas de succès
lucaswxp
1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda
J'ai utilisé cette réponse et l' libevent not founderreur suis parti, mais maintenant je reçois la même chose avec ncurses: curses not found. Mon libeventainsi que des ncursesinstallations sont à la fois$HOME/.local/
Aalok
Pour libevent, utiliser LIBEVENT_CFLAGSet LIBEVENT_LIBSau lieu de CFLASGet LDFLAGS. Pour ncurse, utiliser LIBTINFO_CFLAGSet LIBTINFO_LIBS@Aalok
Jongsu Liam Kim
9

J'avais un problème similaire et sudo yum install libevent-develj'ai découvert qu'après mon exécution, je pouvais créer et installer tmux avec succès.

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

Snap Shot
la source
3
Ce serait la façon habituelle de résoudre ce problème, mais dans ce cas, c’était «une machine où je n’ai pas accès à la racine»
Michael Mrozek
Cela m'a aidé. Je n'étais pas root et je n'avais pas installé la version de développement.
polym
où obtenez-vous la bibliothèque de développement sous forme de fichier tar?
arrowill12
1
pour ma machine fedora, je devais aussi installer sudo miam installer ncurses-devel en plus de miam installer libevent-devel
Mustakimur Rahman le
6

J'ai eu le même problème sur RHEL 5.4 et réellement 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, ça ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.somarche plutôt bien pour moi sans qu'il soit nécessaire d'installer ou de modifier quoi que ce soit. Aucune idée pourquoi libevent rpm de RedHat n'a pas créé le lien symbolique. Peut-être un bug à signaler?

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

cépale
la source
Je suis la même erreur exacte: error: event.h: No such file or directory.
gkb0986
Je suis sur RHEL 6 et je viens de télécharger et de compiler libevent, en l'installant dans un dossier utilisateur. Ensuite, j'ai utilisé le truc de @ Stéphane Gimenez ci-dessus pour le compiler. Pour le faire fonctionner, je alias avec l'astuce LD_PRELOAD donnée par @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Fonctionne comme un charme!
CSL
1
Si vous vous retrouvez avec des liens symboliques ou que vous copiez manuellement des éléments dans des répertoires système, il existe un meilleur moyen de le faire.
Kusalananda
3

Avant la configuration et la compilation de tmux (ou de tout programme), vous devez lui indiquer où 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_PRELOADpour indiquer l'emplacement de 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 la exportdéclaration dans votre .bashrc(si bash est votre shell de connexion).

rozcietrzewiacz
la source
Merci, mais malheureusement cela ne fonctionne pas, même message d'erreur. Le numéro de version est libevent-2.0.12, ce qui devrait fonctionner
volker
Ensuite, il semble que votre compilation libevent pose un problème. Que find .bin-libevent -name 'libevent.so*'montre?
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'trouve.bin-libevent/lib/libevent.so
volker
:) Ensuite, vous devriez pointer vers le répertoire $HOME/.bin-libevent/lib(mis à jour la réponse)
rozcietrzewiacz
Oui, j'ai bien peur d'avoir déjà essayé cela aussi, toujours pas de changement. Je suis assez perplexe et frustrée.
Volker
1

Il existe un élément essentiel sur 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
la source
1
Des curses ont également été installés dans un emplacement personnalisé (je ne suis pas un administrateur du système cible) et je n’ai pas réalisé qu’il s’installe lui-même dans le ncursessous - répertoire du chemin d’inclusion / bibliothèque que vous spécifiez. Choix de conception étrange. Cela a résolu le problème pour moi.
Wbadart
0

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

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

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

Qian Zhang
la source
Je ne sais pas pourquoi cela a été voté. Il a résolu le problème pour moi sur un système CentOS.
Dharmit
0

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_CFLAGSremplace pkg-configles paramètres d'inclusion pour libevent et LIBEVENT_LIBSles paramètres d'indicateur de l'éditeur de liens.

Gabriel Southern
la source
-3

Sur CentOS 6, compilez et installez libevent dans un /opt/libeventrépertoire à l’aide de la commande suivante:

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

Ensuite, installez mon application (dans ce cas c'était PgBouncer)

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

Vous pouvez changer les répertoires où vous voulez.

Cepxio
la source