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

68

Ich möchte tmux auf einem Computer installieren, auf dem ich keinen Root-Zugriff habe. Ich habe bereits libevent kompiliert und installiert es in $HOME/.bin-libeventund jetzt will ich tmux kompilieren, aber konfigurieren endet immer mit configure: error: "libevent not found", auch wenn ich auf das libevent Verzeichnis in der Punkt versucht Makefile.amdurch Modifizieren LDFLAGSund CPPFLAGS, aber nichts scheint zu funktionieren.

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

volker
quelle
Eine Alternative besteht darin, dtach zu untersuchen . Praktisch, wenn Sie entfernbare Sitzungen möchten, aber kein Root haben und keine Zeit haben, tmux statisch zu kompilieren.
Sonia Hamilton
Wenn Sie auf RHEL 6.x sind, gibt es in den Repos einen vorkompilierten tmux.
Chili

Antworten:

63

Versuchen:

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

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

Stéphane Gimenez
quelle
4
Dies ist der Ansatz, der makeschließlich funktioniert hat. Ich habe versucht , andere Einstellung von Umgebungsvariablen und Einstellung prefixund exec-prefix, aber sobald ich diese Flags enthalten Zeug tatsächlich gebaut.
Wizonesolutions
Wie würde ich vorgehen, um mehrere Verzeichnisse für die Flags anzugeben? Ich habe versucht, ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"aber keinen Erfolg
Lucaswxp
1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda
Ich habe diese Antwort und die libevent not foundFehler ging weg, aber jetzt bekomme ich das gleiche mit ncurses: curses not found. Sowohl meine libeventals auch meine ncursesInstallationen sind in$HOME/.local/
Aalok
Für libeventverwenden LIBEVENT_CFLAGSund LIBEVENT_LIBSstatt CFLASGund LDFLAGS. Für ncurseverwenden LIBTINFO_CFLAGSund LIBTINFO_LIBS@Aalok
Jongsu Liam Kim
9

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

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 Kanal RHEL Server Optional hinzufügen. Dadurch erhalten Sie Zugriff auf die -devel-Pakete für libevent (der Basis- und der Zusatzkanal stellen dies nicht zur Verfügung).

Schnappschuss
quelle
3
Dies wäre der normale Weg, um das Problem zu beheben, aber in diesem Fall war es "ein Computer, auf dem ich keinen Root-Zugriff habe"
Michael Mrozek
Das hat mir geholfen. Ich war nicht root und hatte die devel lib nicht installiert.
Polym
woher bekommst du die devel lib als tar datei
arrowill12
1
Für meine Fedora-Maschine musste ich neben sudo yum libevent-devel
Mustakimur Rahman
6

Ich hatte das gleiche Problem auf 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

Funktioniert also ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.soziemlich gut für mich, ohne dass etwas installiert oder geändert werden muss. Keine Ahnung, warum RedHats libevent rpm den Symlink nicht erzeugt hat. Vielleicht ein Fehler zu melden?

Aber jetzt, es ist für diese beschweren: error: event.h: No such file or directory.

cepal
quelle
Ich habe exakt den gleichen Fehler: error: event.h: No such file or directory.
gkb0986
Ich bin auf RHEL 6 und habe gerade libevent heruntergeladen, kompiliert und in einem Benutzerordner installiert. Dann habe ich @ Stéphane Gimenezs obigen Trick benutzt, um es kompilieren zu lassen. Um es läuft, ich Aliase mit dem LD_PRELOAD Trick von @rozcietrzewiacz gegeben: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Klappt wunderbar!
csl
1
Wenn Sie mit Symlinks herumspielen oder Dinge manuell in Systemverzeichnissen kopieren, gibt es eine bessere Möglichkeit, dies zu tun.
Kusalananda
3

Bevor Sie tmux (oder ein anderes Programm) konfigurieren und kompilieren können, müssen Sie ihm mitteilen, wo sich die benötigten Bibliotheken befinden. Wenn Sie eine Bibliothek an einem nicht standardmäßigen Speicherort installiert haben, können Sie anhand der Umgebungsvariablen LD_LIBRARY_PRELOADfeststellen, wo sich einige Bibliotheken befinden.

Ich dein Fall:

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

Und dann weiter mit der Konfiguration / Kompilierung.

Später muss die Binärdatei auch wissen, wo sich Ihre zusätzlichen Bibliotheken befinden. Daher müssen Sie die exportAnweisung in Ihre .bashrceinfügen (wenn bash Ihre Anmeldeshell ist).

rozcietrzewiacz
quelle
Danke, aber leider klappt das nicht, selbe Fehlermeldung. Die Versionsnummer ist libevent-2.0.12 und sollte funktionieren
volker
Dann scheint es ein Problem mit Ihrer libevent-Kompilierung zu geben. Was find .bin-libevent -name 'libevent.so*'zeigt?
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'Funde.bin-libevent/lib/libevent.so
Volker
:) Dann sollten Sie auf das Verzeichnis zeigen $HOME/.bin-libevent/lib(aktualisierte die Antwort)
rozcietrzewiacz
Ja, ich fürchte, ich habe das auch schon versucht, immer noch keine Änderung. Ich bin ziemlich verwirrt und frustriert.
volker
1

Es gibt eine Übersicht 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."
serv-inc
quelle
1
Ich hatte auch Curses an einem benutzerdefinierten Speicherort installiert (ich bin kein Administrator auf dem Zielsystem) und wusste nicht, dass es sich selbst in das ncursesUnterverzeichnis des angegebenen include / library-Pfads installiert . Seltsame Designauswahl. Das hat es für mich behoben.
Badart
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 das Problem zu beheben: 1. Installieren Sie das libevent-develPaket. 2. ncurses-develPaket installieren

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

Erstens wird man kein event.hProblem lösen und zweitens kann man kein Fluchproblem finden. Übrigens funktioniert die obige Softlink-Methode auch bei mir während ./configure.

Qian Zhang
quelle
Ich bin mir nicht sicher, warum es abgelehnt wurde. Es hat das Problem für mich auf einem CentOS-System behoben.
Dharmit
0

Die akzeptierte Antwort ist gut, aber ab tmux 2.8 gibt es Unterstützung für die Angabe des Speicherorts für Ereignisse mithilfe von Umgebungsvariablen.

Installieren Sie zuerst libevent am gewünschten Ort. Ich habe cmake verwendet, weil ich ein Problem mit der Autokonfiguration hatte

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

Dann baue und installiere tmux:

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

Die LIBEVENT_CFLAGSÜberschreibungen der Umgebungsvariablen pkg-configumfassen Einstellungen für libevent und LIBEVENT_LIBSüberschreiben die Einstellungen für das Linker-Flag.

Gabriel Southern
quelle
-3

Kompilieren und installieren Sie unter CentOS 6 libevent im /opt/libeventVerzeichnis mit dem folgenden Befehl:

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

Dann installiere meine Anwendung (in diesem Fall war es PgBouncer)

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

Sie können die Verzeichnisse beliebig ändern.

Cepxio
quelle