루트 액세스 없이 libevent 2.1의 사용자 정의 빌드를 사용하여 소스에서 Tmux를 빌드하는 방법은 무엇입니까?

루트 액세스 없이 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)

관련 정보