Por que o gcc não pode encontrar o libevent ao criar o tmux a partir do código-fonte?

68

Quero instalar o tmux em uma máquina em que não tenho acesso root. Eu já compilei o libevent e o instalei no $HOME/.bin-libevente agora quero compilar o tmux, mas o configure sempre termina com configure: error: "libevent not found", mesmo que eu tenha tentado apontar para o diretório libevent no Makefile.ammodificando LDFLAGSe CPPFLAGS, mas nada parece funcionar.

Como posso dizer ao sistema para procurar no diretório home o libevent?

volker
fonte
Uma alternativa é investigar o dtach . Prático quando você deseja sessões destacáveis, mas não possui root e não tem tempo para compilar estaticamente o tmux.
Sonia Hamilton
Se você estiver no RHEL 6.x, há um tmux pré-compilado nos repositórios.
Chili

Respostas:

63

Experimentar:

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

(Tenho certeza de que deve haver uma maneira melhor de configurar os caminhos da biblioteca com o autoconf. Geralmente há uma --with-libevent=diropção. Mas aqui parece que não existe essa opção.)

Stéphane Gimenez
fonte
4
Essa é a abordagem que makefinalmente fez o trabalho. Tentei definir outras variáveis ​​de ambiente prefixe exec-prefix, mas, uma vez incluídas essas bandeiras, as coisas realmente foram construídas.
Wizonesolutions
Como eu especificaria vários diretórios para os sinalizadores? Eu tentei ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir", mas sem sucesso
lucaswxp
11
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda
Eu usei esta resposta eo libevent not founderro foi embora, mas agora eu recebo o mesmo com ncurses: curses not found. Meus libeventbem como ncursesinstalações estão ambos em$HOME/.local/
Aalok
Para libevent, use LIBEVENT_CFLAGSe em LIBEVENT_LIBSvez de CFLASGe LDFLAGS. Para ncurse, use LIBTINFO_CFLAGSe LIBTINFO_LIBS@Aalok
Jongsu Liam Kim
9

Eu estava tendo um problema semelhante e descobri que, após a execução sudo yum install libevent-devel, consegui criar e instalar o tmux com sucesso.

EDIT: Se você estiver instalando isso em uma máquina Red Hat, também precisará visitar a seleção de canais para seu servidor na Red Hat Network e adicionar o canal opcional do servidor RHEL. Isso lhe dará acesso aos pacotes -devel para libevent (os canais base e suplementares não o fornecem).

Snap Shot
fonte
3
Essa seria a maneira normal de corrigi-lo, mas neste caso era "uma máquina onde não tenho acesso root"
Michael Mrozek
Isso me ajudou. Eu não era root e não havia instalado a biblioteca de desenvolvimento.
polym 13/07
de onde você tira a lib devel como um arquivo tar?
arrowill12
11
para a minha máquina fedora, eu também obrigados a sudo yum install ncurses-devel além sudo yum install libevent-devel
Mustakimur Rahman
6

Eu tive o mesmo problema no RHEL 5.4 e realmente encontrei o libevent está instalado, mas não existe o link simbólico libevent.so, apenas a versão real da biblioteca:

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

Portanto, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.sofunciona muito bem para mim sem a necessidade de instalar ou alterar nada. Não faço ideia por que o rpm libevent do RedHat não criou o link simbólico. Talvez um bug para relatar?

Mas agora, ele está reclamando para isso: error: event.h: No such file or directory.

cepal
fonte
Eu tenho o mesmo erro exato: error: event.h: No such file or directory.
Gkb0986
Estou no RHEL 6 e baixei e compilei o libevent, instalando-o em uma pasta de usuário. Então usei o truque de @ Stéphane Gimenez acima para compilá-lo. Para obtê-lo correr, I aliases com o truque LD_PRELOAD dada pelo @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Funciona como um encanto!
precisa
11
Se você estiver brincando com links simbólicos ou copiando manualmente as coisas nos diretórios do sistema, existe uma maneira melhor de fazê-lo.
Kusalananda
3

Antes da configuração e compilação do tmux (ou de qualquer programa), é necessário informar onde ele pode encontrar as bibliotecas necessárias. Se você instalou alguma biblioteca em um local não padrão, pode usar a variável ambiental LD_LIBRARY_PRELOADpara informar onde estão localizadas algumas bibliotecas.

Eu seu caso:

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

E depois continue com a configuração / compilação.

Posteriormente, o binário também precisará saber onde suas bibliotecas adicionais podem ser encontradas; portanto, você precisará colocar a exportdeclaração no seu .bashrc(se bash for seu shell de login).

rozcietrzewiacz
fonte
Obrigado, mas, infelizmente, isso não funciona, mesma mensagem de erro. O número da versão é libevent-2.0.12 que deve funcionar
Volker
Parece que há um problema com sua compilação de eventos gratuitos. O que find .bin-libevent -name 'libevent.so*'mostra?
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'encontra.bin-libevent/lib/libevent.so
Volker
:) Então você deve apontar para o diretório $HOME/.bin-libevent/lib(atualizado a resposta)
rozcietrzewiacz
Sim, receio que já tenha tentado isso também, ainda não há mudanças. Estou bastante confuso e frustrado.
Volker
1

Há uma essência em 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
fonte
11
Também tive maldições instaladas em um local personalizado (não sou administrador no sistema de destino) e não percebi que ele se instala no ncursessubdiretório de qualquer caminho de inclusão / biblioteca que você especificar. Escolha de design ímpar. Isso consertou para mim.
wbadart 15/03
0

Eu tenho o mesmo problema e parece que a resposta mais votada não funcionou para mim. Estou usando o Fedora 22 Workstation. Aqui está o que eu fiz para corrigir isso: 1. Instale o libevent-develpacote. 2. Instale o ncurses-develpacote

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

O primeiro não resolve nenhum event.hproblema e o segundo resolve não consegue encontrar o problema das maldições. BTW, o método softlink acima também funciona para mim durante ./configure.

Qian Zhang
fonte
Não sei por que foi votado. Corrigiu o problema para mim em um sistema CentOS.
Dharmit 04/10
0

A resposta aceita é boa, mas, pelo menos, no tmux 2.8, há suporte para especificar a localização do libevent usando variáveis ​​de ambiente.

Primeiro instale o libevent no local desejado. Eu usei o cmake porque tive um problema com o autoconf

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

Em seguida, construa e instale o tmux:

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

As LIBEVENT_CFLAGSsubstituições de variáveis ​​de ambiente pkg-configincluem configurações para libevent e LIBEVENT_LIBSsubstituem as configurações de sinalizador do vinculador.

Gabriel Southern
fonte
-3

No CentOS 6, compile e instale o libevent no /opt/libeventdiretório com o comando:

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

Em seguida, instale minha aplicação (neste caso, o PgBouncer)

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

Você pode alterar os diretórios onde quiser.

Cepxio
fonte