it-swarm-id.com

Mengapa gcc tidak dapat menemukan libevent saat membuat tmux dari sumber?

Saya ingin menginstal tmux pada mesin di mana saya tidak memiliki akses root. Saya sudah mengkompilasi libevent dan menginstalnya di $HOME/.bin-libevent dan sekarang saya ingin mengkompilasi tmux, tetapi konfigurasi selalu berakhir dengan configure: error: "libevent not found", meskipun saya mencoba menunjuk ke direktori libevent di Makefile.am dengan memodifikasi LDFLAGS dan CPPFLAGS, tetapi sepertinya tidak ada yang berhasil.

Bagaimana saya bisa memberi tahu sistem untuk mencari di direktori home saya untuk libevent?

68
volker

Mencoba:

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

(Saya yakin pasti ada cara yang lebih baik untuk mengkonfigurasi jalur perpustakaan dengan autoconf. Biasanya ada --with-libevent=dir pilihan. Tapi di sini, sepertinya tidak ada opsi seperti itu.)

64

Saya mengalami masalah yang sama dan menemukan bahwa setelah menjalankan Sudo yum install libevent-devel Saya berhasil membuat dan menginstal tmux.

EDIT: Jika Anda menginstal ini pada mesin Red Hat, Anda juga harus mengunjungi pilihan saluran untuk server Anda di Red Hat Network dan menambahkan saluran RHEL Server Opsional. Ini akan memberi Anda akses ke paket -devel untuk libevent (saluran dasar dan tambahan tidak menyediakannya).

9
Snap Shot

Saya memiliki masalah yang sama pada RHEL 5.4 dan benar-benar menemukan libevent diinstal tetapi tidak ada symlink libevent.so, hanya versi asli dari perpustakaan:

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

Jadi, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so bekerja dengan baik bagi saya tanpa perlu menginstal atau mengubah apa pun. Tidak tahu mengapa rpm RedHat tidak membuat symlink. Mungkin bug untuk dilaporkan?

Tapi sekarang, ini mengeluh untuk ini: error: event.h: No such file or directory.

6
cepal

Sebelum konfigurasi dan kompilasi tmux (atau program apa pun), Anda harus memberi tahu di mana ia dapat menemukan perpustakaan yang dibutuhkan. Jika Anda telah menginstal beberapa pustaka di lokasi non-standar, Anda dapat menggunakan variabel lingkungan LD_LIBRARY_PRELOAD Untuk mengetahui, di mana beberapa pustaka berada.

Saya kasus Anda:

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

Dan kemudian lanjutkan dengan konfigurasi/kompilasi.

Kemudian, biner juga perlu tahu di mana perpustakaan tambahan Anda dapat ditemukan, jadi Anda harus menempatkan pernyataan export dalam .bashrc Anda (jika bash adalah Shell login Anda).

3
rozcietrzewiacz

Ada Intisari di 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

Jawaban yang diterima baik, tetapi setidaknya tmux 2.8 ada dukungan untuk menentukan lokasi libevent menggunakan variabel lingkungan.

Pertama instal libevent di lokasi yang diinginkan. Saya menggunakan cmake karena saya punya masalah dengan autoconf

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

Kemudian buat dan instal tmux:

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

Variabel lingkungan LIBEVENT_CFLAGS menimpa pkg-config termasuk pengaturan untuk libevent, dan LIBEVENT_LIBS mengesampingkan pengaturan bendera tautan.

0
Gabriel Southern

Saya memiliki masalah yang sama dan sepertinya jawaban yang paling banyak dipilih tidak bekerja untuk saya. Saya menggunakan Fedora 22 Workstation. Inilah yang saya lakukan untuk memperbaikinya: 1. Instal paket libevent-devel. 2. Instal paket ncurses-devel

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

Yang pertama tidak akan menyelesaikan masalah event.h Dan yang kedua tidak akan menemukan masalah kutukan. BTW, metode softlink di atas juga berfungsi untuk saya selama ./configure.

0
Qian Zhang