it-swarm-ja.com

ソースからtmuxをビルドするときに、gccがlibeventを見つけられないのはなぜですか?

Rootアクセス権がないマシンにtmuxをインストールしたい。 libeventをコンパイルして$HOME/.bin-libeventにインストールし、tmuxをコンパイルしたいのですが、configure: error: "libevent not found"のlibeventディレクトリを指定しようとしても、configureは常にMakefile.amで終わりますLDFLAGSおよびCPPFLAGSを変更しますが、何も機能しないようです。

Libeventのホームディレクトリを検索するようにシステムに指示するにはどうすればよいですか?

68
volker

試してください:

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

(autoconfでライブラリパスを構成するためのより良い方法があるはずです。通常、--with-libevent=dirオプション。しかし、ここではそのようなオプションはないようです。)

64

私は同様の問題を抱えていて、Sudo yum install libevent-develを実行した後、tmuxを正常に作成してインストールできることがわかりました。

編集:これをRed Hatマシンにインストールする場合は、Red Hat Network上のサーバーのチャネル選択にアクセスし、RHELサーバーのオプションチャネルを追加する必要もあります。これにより、libeventの-develパッケージにアクセスできるようになります(基本チャネルおよび補助チャネルでは提供されません)。

9
Snap Shot

RHEL 5.4でも同じ問題が発生し、実際にlibeventがインストールされていることがわかりましたが、libevent.soシンボリックリンクはなく、ライブラリの実際のバージョンのみです。

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

そう、 ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.soは、何もインストールしたり変更したりする必要がなく、私にとってはかなりうまくいきます。 RedHatのlibevent rpmがシンボリックリンクを作成しなかった理由はわかりません。報告すべきバグかもしれませんか?

しかし、今、これは不満です:error: event.h: No such file or directory

6
cepal

Tmux(または任意のプログラム)の構成とコンパイルの前に、必要なライブラリを見つけることができる場所をそれに通知する必要があります。一部のライブラリを標準以外の場所にインストールした場合は、環境変数LD_LIBRARY_PRELOADを使用して、一部のライブラリがどこにあるかを通知できます。

私はあなたの場合:

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

次に、構成/コンパイルを続けます。

後で、バイナリは追加のライブラリがどこにあるかを知る必要があるため、.bashrcexportステートメントを配置する必要があります(bashがログインシェルの場合)。

3
rozcietrzewiacz

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

受け入れられた答えは良いですが、少なくともtmux 2.8以降、環境変数を使用してlibeventの場所を指定するためのサポートがあります。

まずlibeventを目的の場所にインストールします。 autoconfに問題があったため、cmakeを使用しました

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

次に、tmuxをビルドしてインストールします。

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

環境変数LIBEVENT_CFLAGSオーバーライドpkg-config libeventの設定を含み、LIBEVENT_LIBSは、リンカーフラグの設定を上書きします。

0

私も同じ問題を抱えており、最も賛成された回答ではうまくいかなかったようです。 Fedora 22 Workstationを使用しています。これを修正するために私がしたことは次のとおりです。1. libevent-develパッケージをインストールします。 2. ncurses-develパッケージをインストールします

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

1つ目はevent.hの問題を解決せず、2つ目はcursesの問題を解決できません。ところで、上記のソフトリンクの方法は、./configureでも機能します。

0
Qian Zhang