it-swarm-eu.dev

Proč gcc nemůže najít libevent, když buduje tmux ze zdroje?

Chci nainstalovat tmux na stroj, kde nemám přístup root. Již jsem zkompiloval libevent a nainstaloval ho v $HOME/.bin-libevent a nyní chci kompilovat tmux, ale konfigurace vždy končí configure: error: "libevent not found", i když jsem se pokusil ukázat na adresář libevent v Makefile.am úpravou LDFLAGS a CPPFLAGS, ale zdá se, že nic nefunguje.

Jak mohu říct systému, aby hledal v mém domácím domě libevent?

68
volker

Snaž se:

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

(Jsem si jist, že musí existovat lepší způsob, jak nakonfigurovat cesty knihovny s automatickým porovnáváním. Obvykle existuje --with-libevent=dir možnost. Zdá se však, že zde taková možnost neexistuje.)

64

Měl jsem podobný problém a zjistil jsem, že po spuštění Sudo yum install libevent-devel Byl jsem schopen úspěšně vytvořit a nainstalovat tmux.

ÚPRAVA: Pokud toto instalujete do počítače Red Hat, budete muset také navštívit výběr kanálů pro váš server v síti Red Hat a přidat volitelný kanál serveru RHEL. Tím získáte přístup k balíčkům -devel pro libevent (základní a doplňkové kanály to neposkytují).

9
Snap Shot

Měl jsem stejný problém na RHEL 5.4 a skutečně jsem zjistil, že je nainstalován libevent, ale neexistuje žádný libevent.so symlink, pouze skutečná verze knihovny:

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

Tak, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so pro mě funguje docela dobře, aniž byste museli nic instalovat ani měnit. Nemám ponětí, proč RedHatovy nezávislé otáčky nevytvořily symbolický odkaz. Možná chybu nahlásit?

Ale teď si to stěžuje: error: event.h: No such file or directory.

6
cepal

Před konfigurací a kompilací tmux (nebo jakéhokoli programu) je třeba mu sdělit, kde může najít potřebné knihovny. Pokud jste nainstalovali nějakou knihovnu v nestandardním umístění, můžete pomocí proměnné prostředí LD_LIBRARY_PRELOAD Zjistit, kde jsou umístěny některé knihovny.

Já tvůj případ:

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

A pak pokračujte v konfiguraci/kompilaci.

Později bude binární také muset vědět, kde lze najít další knihovny, takže budete muset do svého .bashrc Vložit příkaz export (pokud bash je vaše přihlašovací schránka).

3
rozcietrzewiacz

Na stránce 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

Přijatá odpověď je dobrá, ale přinejmenším od tmux 2,8 existuje podpora pro určení libevent umístění pomocí proměnných prostředí.

Nejprve nainstalujte libevent do požadovaného umístění. Použil jsem cmake, protože jsem měl problém s autoconfem

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

Poté vytvořte a nainstalujte tmux:

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

Proměnná prostředí LIBEVENT_CFLAGS přepíše pkg-config zahrnout nastavení pro libevent a LIBEVENT_LIBS přepíše nastavení příznaku linkeru.

0
Gabriel Southern

Mám stejný problém a zdá se, že pro mě nejodpornější odpověď pro mě nefungovala. Používám pracovní stanici Fedora 22. Tohle je to, co jsem udělal, abychom to vyřešili: 1. Nainstalujte libevent-devel balíček. 2. Nainstalujte ncurses-devel balíček

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

První z nich nevyřeší žádné event.h problem a druhý vyřeší nemůže najít kletbu problém. BTW, výše uvedená metoda softlink funguje také pro mě během ./configure.

0
Qian Zhang