rootにアクセスせずにlibevent 2.1のカスタムビルドを使用してソースからTmuxをビルドする方法は?

rootにアクセスせずにlibevent 2.1のカスタムビルドを使用してソースからTmuxをビルドする方法は?

科学コンピューティングクラスタノードでTmuxを使用したいのですが、どのノードでも使用できません。環境モジュール私は見ることができる。そのため、ルートアクセスを必要とせずにソースからビルドを始めました。.configurelibeventが必要なので、私のホームディレクトリにlibevent 2.1を正常にダウンロードしてビルドしました。しかし、Tmuxの設定スクリプトでlibeventを指定する方法がわかりません。どうすればいいですか?

注:この質問は次のようによく似ています。ソースからtmuxをビルドするときにgccがlibeventを見つけることができないのはなぜですか?しかし、libevent 2.1を使用しています。

答え1

で述べたようにソースからtmuxをビルドするときにgccがlibeventを見つけることができないのはなぜですか?with-libevent=dir選択の余地がない。したがって、Tmuxを設定するときは、次の手順を実行します。

DIR="$HOME/path/to/libevent"
./configure CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/.libs"

これは.libs、libの代わりに。私はこれがlibevent 2.1の変更だと思います。

これにより、構成検証に合格し、コンパイルされます。しかし、あなたはまだ森から出ていません。この操作だけを実行すると、次を実行しようとするとtmux次のエラーが発生します。

error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory

このブログ投稿解決策があります。次のように.libsパスを追加します。LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/path/to/libevent/.libs

次に、次回のログイン時に「固定」にするには、上記の行をファイルに貼り付けます~/.bashrc。端末でコマンドを実行すると、そのセッション中のみ持続します。

答え2

あなたはそれを使用することができますpkg-config 簡単にしてください。

まず、この例では次の場所にlibeventインストールします。このディレクトリは手動で作成する必要はなく、ビルドプロセス中に自動的に作成されます。以下を実行するためにルートになる必要はありません。libevent/tmp/libeventmake install

$ ./autogen.sh
$ ./configure  --prefix=/tmp/libevent
$ make
$ make install

これで、次のものが必要です/tmp/libevent/lib/pkgconfig/libevent.pc

$ cat /tmp/libevent/lib/pkgconfig/libevent.pc
#libevent pkg-config source file

prefix=/tmp/libevent
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libevent
Description: libevent is an asynchronous notification event loop library
Version: 2.2.0-alpha-dev
Requires:
Conflicts:
Libs: -L${libdir} -levent
Libs.private:
Cflags: -I${includedir}

prefix引数として渡されたディレクトリに設定されていることに注意してください./configure

tmuxをビルドする前に、以下を/tmp/libevent/lib/pkgconfig追加してください PKG_CONFIG_PATH

$ export PKG_CONFIG_PATH=/tmp/libevent/lib/pkgconfig:$PKG_CONFIG_PATH
$ pkg-config --cflags --libs libevent
-I/tmp/libevent/include -L/tmp/libevent/lib -levent

その後、tmux正常にビルドします。

$ ./autogen.sh
$ ./configure
$ make

tmux実際にカスタマイズを開始するには正しく設定するlibevent必要があります。LD_LIBRARY_PATH

$ ldd ./tmux
        linux-vdso.so.1 (0x00007ffce3d92000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f2f1d77e000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f2f1d527000)
        libevent-2.2.so.1 => not found
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f2f1d30b000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2f1cf42000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f2f1cd3d000)
        /lib64/ld-linux-x86-64.so.2 (0x000055cdf0697000)
$ ./tmux
./tmux: error while loading shared libraries: libevent-2.2.so.1: cannot open shared object file: No such file or directory
$ LD_LIBRARY_PATH=/tmp/libevent/lib ./tmux -V
tmux master

編集する:

設定を削除するには、ビルド時に設定LD_LIBRARY_PATHできます。rpathtmux

$ ./configure LDFLAGS="-Wl,-rpath=/tmp/libevent/lib"
$ make
$ ldd ./tmux
        linux-vdso.so.1 (0x00007ffcc6de1000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007fbe121a4000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fbe11f4c000)
        libevent-2.2.so.1 => /tmp/libevent/lib/libevent-2.2.so.1 (0x00007fbe11cf7000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fbe11adc000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fbe11712000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fbe1150e000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbe112f1000)
        /lib64/ld-linux-x86-64.so.2 (0x000055f057ef4000)
 $ ./tmux -V
 tmux master

答え3

libevent-2.1.so.7をインストールした後でもtmuxを実行すると同様の問題が発生しました。 /lib64/ ディレクトリにインストールされたファイルのシンボリックリンクを生成することは私にとって効果的でした。

$sudo ln -s /usr/local/lib/libevent-2.1.so.7.0.0 /lib/x86_64-linux-gnu/libevent-2.1.so.7

$ldd tmux
    linux-vdso.so.1 (0x00007fff6f9fe000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f675b5eb000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f675b3c1000)
    libevent-2.1.so.7 => /lib/x86_64-linux-gnu/libevent-2.1.so.7 (0x00007f675b16b000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f675af50000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f675ab5f000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f675a940000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f675ba9f000)

関連情報