科学コンピューティングクラスタノードでTmuxを使用したいのですが、どのノードでも使用できません。環境モジュール私は見ることができる。そのため、ルートアクセスを必要とせずにソースからビルドを始めました。.configure
libeventが必要なので、私のホームディレクトリに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/libevent
make 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
できます。rpath
tmux
$ ./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)