¿Por qué gcc no puede encontrar libevent al construir tmux desde la fuente?

68

Quiero instalar tmux en una máquina donde no tengo acceso de root. Ya compilé libevent y lo instalé $HOME/.bin-libeventy ahora quiero compilar tmux, pero configure siempre termina con configure: error: "libevent not found", aunque traté de señalar el directorio libevent en la Makefile.ammodificación LDFLAGSy CPPFLAGS, pero nada parece funcionar.

¿Cómo puedo decirle al sistema que busque en el directorio de mi casa el liberante?

volker
fuente
Una alternativa es investigar dtach . Práctico cuando desea sesiones desmontables, pero no tiene root y no tiene tiempo para compilar estáticamente tmux.
Sonia Hamilton
Si está en RHEL 6.x, hay un tmux precompilado en los repositorios.
Chile

Respuestas:

63

Tratar:

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

(Estoy seguro de que debe haber una mejor manera de configurar las rutas de la biblioteca con autoconf. Por lo general, hay una --with-libevent=diropción. Pero aquí, parece que no hay tal opción).

Stéphane Gimenez
fuente
44
Este es el enfoque que makefinalmente hizo funcionar. Traté de configurar otras variables de entorno y configuración prefixy exec-prefix, pero una vez que incluí estas cosas de banderas realmente se construyeron.
wizonesolutions
¿Cómo haría para especificar varios directorios para las banderas? Lo intenté ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"pero no
tuve
1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda
He utilizado esta respuesta y el libevent not founderror fui, pero ahora tengo la misma con ncurses: curses not found. Tanto mi libeventcomo las ncursesinstalaciones están en$HOME/.local/
Aalok
Para libevent, use LIBEVENT_CFLAGSy en LIBEVENT_LIBSlugar de CFLASGy LDFLAGS. Para ncurse, use LIBTINFO_CFLAGSy LIBTINFO_LIBS@Aalok
Jongsu Liam Kim
9

Estaba teniendo un problema similar y descubrí que después de ejecutar sudo yum install libevent-develpude hacer e instalar con éxito tmux.

EDITAR: Si está instalando esto en una máquina Red Hat, también necesitará visitar la selección de canales para su servidor en Red Hat Network y agregar el canal RHEL Server Opcional. Esto le dará acceso a los paquetes de desarrollo para libevent (los canales base y suplementarios no lo proporcionan).

Snap Shot
fuente
3
Esta sería la forma normal de solucionarlo, pero en este caso era "una máquina donde no tengo acceso de root"
Michael Mrozek
Esto me ayudo. No era root y no había instalado el desarrollo lib.
polym
¿De dónde sacas el lib de desarrollo como un archivo tar?
arrowill12
1
para mi máquina fedora, también requería sudo yum install ncurses-devel además de sudo yum install libevent-devel
Mustakimur Rahman
6

Tuve el mismo problema en RHEL 5.4 y en realidad encontré que libevent está instalado, pero no hay un enlace simbólico libevent.so, solo la versión real de la biblioteca:

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

Entonces, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.sofunciona bastante bien para mí sin la necesidad de instalar o alterar nada. No tengo idea de por qué las rpm liberadoras de RedHat no crearon el enlace simbólico. Tal vez un error para informar?

Pero ahora, que se queja de esto: error: event.h: No such file or directory.

cepal
fuente
Tengo el mismo error exacto: error: event.h: No such file or directory.
gkb0986
Estoy en RHEL 6, y acabo de descargar y compilar libevent, instalándolo en una carpeta de usuario. Luego utilicé el truco de @ Stéphane Gimenez para compilarlo. Para hacerlo funcionar, alias I con el truco LD_PRELOAD dada por @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. ¡Funciona de maravilla!
csl
1
Si te encuentras jugando con enlaces simbólicos o copiando cosas manualmente en los directorios del sistema, entonces hay una mejor manera de hacerlo.
Kusalananda
3

Antes de la configuración y compilación de tmux (o cualquier programa), debe decirle dónde puede encontrar las bibliotecas que necesita. Si ha instalado alguna biblioteca en una ubicación no estándar, puede usar la variable de entorno LD_LIBRARY_PRELOADpara saber dónde se encuentran algunas bibliotecas.

Yo tu caso:

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

Y luego continúe con la configuración / compilación.

Más adelante, el binario también necesitará saber dónde se pueden encontrar sus bibliotecas adicionales, por lo que deberá colocar la exportdeclaración en su .bashrc(si bash es su shell de inicio de sesión).

rozcietrzewiacz
fuente
Gracias, pero lamentablemente esto no funciona, el mismo mensaje de error. El número de versión es libevent-2.0.12 que debe trabajar
Volker
Entonces parece que hay un problema con tu compilación liberadora. ¿Qué find .bin-libevent -name 'libevent.so*'muestra?
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'encuentra.bin-libevent/lib/libevent.so
volker
:) Entonces deberías apuntar al directorio $HOME/.bin-libevent/lib(actualizó la respuesta)
rozcietrzewiacz
Sí, me temo que ya lo intenté también, todavía no hay cambio. Estoy bastante perplejo y frustrado.
volker
1

Hay una esencia en 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
fuente
1
También tuve maldiciones instaladas en una ubicación personalizada (no soy un administrador en el sistema de destino), y no me di cuenta de que se instala en el ncursessubdirectorio de cualquier ruta de inclusión / biblioteca que especifique. Elección de diseño extraño. Esto me lo arregló.
wbadart
0

Tengo el mismo problema y parece que la respuesta más votada no funcionó para mí. Estoy usando la estación de trabajo Fedora 22. Esto es lo que hice para solucionar esto: 1. Instalar el libevent-develpaquete. 2. Instalar ncurses-develpaquete

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

El primero resolverá ningún event.hproblema y el segundo resolverá el problema de no encontrar maldiciones Por cierto, el método de enlace suave anterior también funciona para mí durante ./configure.

Qian Zhang
fuente
No estoy seguro de por qué fue rechazado. Me solucionó el problema en un sistema CentOS.
Dharmit
0

La respuesta aceptada es buena, pero a partir de al menos tmux 2.8 existe soporte para especificar la ubicación liberante utilizando variables de entorno.

Primero instale libevent en la ubicación deseada. Solía ​​cmake porque tenía un problema con autoconf

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

Luego compila e instala tmux:

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

Las LIBEVENT_CFLAGSanulaciones de la variable de entorno pkg-configincluyen configuraciones para libevent, y LIBEVENT_LIBSanula la configuración del indicador del vinculador.

Gabriel Southern
fuente
-3

En CentOS 6, compile e instale libevent en el /opt/libeventdirectorio con el comando:

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

Luego, instale mi aplicación (en este caso fue PgBouncer)

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

Puedes cambiar los directorios donde quieras.

Cepxio
fuente