소스에서 tmux를 빌드 할 때 gcc가 libevent를 찾을 수없는 이유는 무엇입니까?


68

루트 액세스 권한이없는 컴퓨터에 tmux를 설치하고 싶습니다. 이미 libevent를 컴파일에 설치 $HOME/.bin-libevent하고 지금은 TMUX을 컴파일하려면,하지만 항상로 끝나는 구성 configure: error: "libevent not found"난에서 libevent 디렉토리를 가리 키도록 노력에도 불구하고, Makefile.am수정 LDFLAGS하고 CPPFLAGS,하지만 아무것도 작동하는 것 같다 없습니다.

시스템에 libevent의 홈 디렉토리를 찾도록 지시하려면 어떻게해야합니까?


대안은 dtach 를 조사하는 입니다. 분리 가능한 세션을 원하지만 루트가없고 tmux를 정적으로 컴파일 할 시간이없는 경우에 유용합니다.
Sonia Hamilton

RHEL 6.x를 사용하는 경우 저장소에 사전 컴파일 된 tmux가 있습니다.
Chili

답변:


63

시험:

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

autoconf를 사용하여 라이브러리 경로를 구성하는 더 좋은 방법이 있어야한다고 확신합니다. 일반적으로 --with-libevent=dir옵션이 있습니다. 그러나 여기에는 해당 옵션이없는 것 같습니다.


4
이것이 make마침내 작동 하게 한 접근법입니다 . 다른 환경 변수와 설정 prefix및을 시도 exec-prefix했지만 일단이 플래그를 포함하면 실제로 빌드되었습니다.
wizonesolutions

플래그에 여러 디렉토리를 지정하는 방법은 무엇입니까? 나는 시도 ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"했지만 성공하지 못했습니다
lucaswxp

1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda

이 답변을 사용했는데 libevent not found오류가 사라졌지 만 이제는 ncurses다음 과 같습니다 curses not found. 내 설치는 libevent물론 ncurses둘 다$HOME/.local/
Aalok

를 들어 libevent, 사용 LIBEVENT_CFLAGS하고 LIBEVENT_LIBS대신 CFLASG하고 LDFLAGS. 를 들어 ncurse, 사용 LIBTINFO_CFLAGSLIBTINFO_LIBS@Aalok
Jongsu 리암 김

9

비슷한 문제가 발생하여 실행 후 sudo yum install libevent-develtmux를 성공적으로 만들고 설치할 수 있음을 발견했습니다 .

편집 : 이것을 Red Hat 머신에 설치하는 경우, Red Hat Network에서 서버의 채널 선택을 방문하여 RHEL 서버 옵션 채널을 추가해야합니다. libevent에 대한 -devel 패키지에 액세스 할 수 있습니다 (기본 및 보조 채널은이를 제공하지 않습니다).


3
이 문제를 해결하는 일반적인 방법이지만이 경우에는 "루트 액세스 권한이없는 컴퓨터"
Michael Mrozek

이것은 나를 도왔다. 나는 뿌리가 아니고 devel lib를 설치하지 않았습니다.
polym

devel lib를 tar 파일로 어디서 구할 수 있습니까?
arrowill12

1
내 페도라 기계, I는 sudo는 냠 것은 libevent-(STABLE) 설치 이외의 ncurses-(STABLE)를 설치 sudo는 냠에 필요한
Mustakimur 라만

6

RHEL 5.4에서 동일한 문제가 발생했으며 실제로 libevent가 설치되어 있지만 libevent.so symlink가 없으며 실제 버전의 라이브러리 만 있습니다.

/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이 symlink를 작성하지 않은 이유를 모르겠습니다. 보고 할 버그일까요?

그러나 지금, 이것에 대해 불평하고 있습니다 : error: event.h: No such file or directory.


동일한 오류가 발생했습니다 error: event.h: No such file or directory.
gkb0986

RHEL 6을 사용 중이며 방금 libevent를 다운로드하여 컴파일하여 사용자 폴더에 설치했습니다. 그런 다음 위의 @ Stéphane Gimenez의 트릭을 사용하여 컴파일했습니다. 실행하려면 @rozcietrzewiacz :에 의해 주어진 LD_PRELOAD 트릭으로 별칭을 지정합니다 tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. 매력처럼 작동합니다!
csl

1
심볼릭 링크로 엉망이되거나 시스템 디렉토리에서 수동으로 복사하는 경우 더 나은 방법이 있습니다.
Kusalananda

3

tmux (또는 모든 프로그램)를 구성하고 컴파일하기 전에 필요한 라이브러리를 찾을 수있는 위치를 알려야합니다. 비표준 위치에 일부 라이브러리를 설치 한 경우 환경 변수 LD_LIBRARY_PRELOAD를 사용하여 일부 라이브러리의 위치를 ​​알 수 있습니다.

나는 당신의 경우 :

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

그런 다음 구성 / 컴파일을 계속하십시오.

나중에 바이너리는 추가 라이브러리가있는 곳을 알아야하므로 bash가 로그인 쉘 인 경우 export명령문 을 배치해야합니다 .bashrc.


고맙지 만 슬프게도 동일한 오류 메시지가 작동하지 않습니다. 버전 번호는 libevent-2.0.12이며 작동합니다
volker

그런 다음 libevent 컴파일에 문제가있는 것 같습니다. 무엇을 find .bin-libevent -name 'libevent.so*'보여줍니까?
rozcietrzewiacz

$ find .bin-libevent -name 'libevent.so*'발견.bin-libevent/lib/libevent.so
volker

:) 그런 다음 디렉토리를 가리켜 야합니다 $HOME/.bin-libevent/lib(답변 업데이트)
rozcietrzewiacz

예, 이미 시도했지만 여전히 변경 사항이 없습니다. 나는 매우 당황하고 좌절합니다.
volker

1

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
또한 사용자 정의 위치에 대상 저주를 설치했으며 (대상 시스템의 관리자는 아닙니다) ncurses지정한 포함 / 라이브러리 경로 의 하위 디렉토리에 자신을 설치한다는 것을 알지 못했습니다 . 이상한 디자인 선택. 이것은 나를 위해 그것을 고쳤다.
wbadart

0

나는 똑같은 문제가 있으며 가장 유력한 답변이 효과가없는 것 같습니다. Fedora 22 Workstation을 사용하고 있습니다. 이 문제를 해결하기 위해 수행 한 작업은 다음과 같습니다. 1. libevent-devel패키지를 설치하십시오 . 2. ncurses-devel패키지 설치

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

첫 번째는 아무 event.h문제 도 해결하지 않고 두 번째는 저주 문제를 찾을 수 없습니다. BTW, 위의 소프트 링크 방법은 ./configure.


왜 다운 보트인지 확실하지 않습니다. CentOS 시스템에서 문제가 해결되었습니다.
Dharmit

0

허용되는 답변은 좋지만 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하고 링커 플래그 설정을 대체합니다.


-3

CentOS 6에서 /opt/libevent다음 명령을 사용하여 디렉토리에 libevent를 컴파일하고 설치 하십시오.

# ./configure --prefix=/opt/libevent
# make
# make install

그런 다음 내 응용 프로그램을 설치하십시오 (이 경우 PgBouncer였습니다)

# ./configure --prefix=/opt/ *--with-libevent=/opt/libevent/*

원하는 곳에서 디렉토리를 변경할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.