it-swarm.com.de

Warum kann gcc libevent nicht finden, wenn tmux aus dem Quellcode erstellt wird?

Ich möchte tmux auf einem Computer installieren, auf dem ich keinen Root-Zugriff habe. Ich habe libevent bereits kompiliert und in $HOME/.bin-libevent Installiert und jetzt möchte ich tmux kompilieren, aber configure endet immer mit configure: error: "libevent not found", Obwohl ich versucht habe, auf das libevent-Verzeichnis im Makefile.am durch Ändern von LDFLAGS und CPPFLAGS, aber nichts scheint zu funktionieren.

Wie kann ich das System anweisen, in meinem Home-Verzeichnis nach dem Libevent zu suchen?

68
volker

Versuchen:

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

(Ich bin sicher, es muss eine bessere Möglichkeit geben, Bibliothekspfade mit Autoconf zu konfigurieren. Normalerweise gibt es ein --with-libevent=dir Möglichkeit. Aber hier scheint es keine solche Option zu geben.)

64

Ich hatte ein ähnliches Problem und stellte fest, dass nach dem Ausführen von Sudo yum install libevent-devel Ich konnte tmux erfolgreich erstellen und installieren.

BEARBEITEN: Wenn Sie dies auf einem Red Hat-Computer installieren, müssen Sie auch die Kanalauswahl für Ihren Server im Red Hat-Netzwerk aufrufen und den optionalen RHEL-Serverkanal hinzufügen. Dadurch erhalten Sie Zugriff auf die -devel-Pakete für libevent (die Basis- und Zusatzkanäle bieten diese nicht an).

9
Snap Shot

Ich hatte das gleiche Problem mit RHEL 5.4 und fand tatsächlich, dass libevent installiert ist, aber es gibt keinen libevent.so-Symlink, nur die echte Version der Bibliothek:

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

Damit, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so funktioniert ziemlich gut für mich, ohne dass ich etwas installieren oder ändern muss. Keine Ahnung, warum RedHats Libevent-Drehzahl den Symlink nicht erstellt hat. Vielleicht ein Fehler zu melden?

Aber jetzt beschwert es sich dafür: error: event.h: No such file or directory.

6
cepal

Vor der Konfiguration und Kompilierung von tmux (oder einem anderen Programm) müssen Sie angeben, wo sich die benötigten Bibliotheken befinden. Wenn Sie eine Bibliothek an einem nicht standardmäßigen Speicherort installiert haben, können Sie mithilfe der Umgebungsvariablen LD_LIBRARY_PRELOAD Angeben, wo sich einige Bibliotheken befinden.

Ich dein Fall:

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

Und dann fahren Sie mit der Konfiguration/Kompilierung fort.

Später muss die Binärdatei auch wissen, wo sich Ihre zusätzlichen Bibliotheken befinden. Daher müssen Sie die Anweisung export in Ihre .bashrc Einfügen (wenn bash Ihre Login-Shell ist).

3
rozcietrzewiacz

Es gibt eine Zusammenfassung unter 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

Die akzeptierte Antwort ist gut, aber ab mindestens tmux 2.8 wird die Angabe des Libevent-Speicherorts mithilfe von Umgebungsvariablen unterstützt.

Installieren Sie libevent zuerst an der gewünschten Stelle. Ich habe cmake verwendet, weil ich ein Problem mit Autoconf hatte

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

Dann erstellen und installieren Sie tmux:

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

Die Umgebungsvariable LIBEVENT_CFLAGS überschreibt pkg-config enthält Einstellungen für libevent und LIBEVENT_LIBS überschreibt die Einstellungen des Linker-Flags.

0

Ich habe das gleiche Problem und es scheint, dass die am besten bewertete Antwort bei mir nicht funktioniert hat. Ich benutze Fedora 22 Workstation. Folgendes habe ich getan, um dies zu beheben: 1. Installieren Sie das Paket libevent-devel. 2. Installieren Sie das Paket ncurses-devel

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

Erstens löst man kein event.h Problem und zweitens löst man kein Fluchproblem. Übrigens funktioniert die obige Softlink-Methode auch bei ./configure.

0
Qian Zhang