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

68

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

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

volker
sumber
Alternatifnya adalah menyelidiki dtach . Berguna ketika Anda ingin sesi yang dapat dilepas, tetapi tidak memiliki root dan tidak punya waktu untuk mengkompilasi tmux secara statis.
Sonia Hamilton
Jika Anda menggunakan RHEL 6.x, ada tmux yang sudah dikompilasi sebelumnya dalam repo.
Chili

Jawaban:

63

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=diropsi. Tapi di sini, sepertinya tidak ada opsi seperti itu.)

Stéphane Gimenez
sumber
4
Inilah pendekatan yang makeakhirnya berhasil. Saya mencoba mengatur variabel dan pengaturan lingkungan lainnya prefixdan exec-prefix, tapi begitu saya memasukkan flag-flag ini, sebenarnya dibangun.
wizonesolutions
Bagaimana cara menentukan beberapa direktori untuk bendera? Saya mencoba ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"tetapi tidak berhasil
lucaswxp
1
@lucaswxpCFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
Kusalananda
Saya menggunakan jawaban ini dan libevent not foundkesalahan pergi, tapi sekarang saya mendapatkan yang sama dengan ncurses: curses not found. Saya libeventdan ncursesinstalasi keduanya di$HOME/.local/
Aalok
Untuk libevent, gunakan LIBEVENT_CFLAGSdan LIBEVENT_LIBSbukannya CFLASGdan LDFLAGS. Untuk ncurse, gunakan LIBTINFO_CFLAGSdan LIBTINFO_LIBS@Aokok
Jongsu Liam Kim
9

Saya mengalami masalah yang sama dan menemukan bahwa setelah menjalankan sudo yum install libevent-develsaya 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).

Bidikan Jepretan
sumber
3
Ini akan menjadi cara normal untuk memperbaikinya, tetapi dalam kasus ini adalah "mesin di mana saya tidak memiliki akses root"
Michael Mrozek
Ini membantu saya. Saya bukan root dan saya belum menginstal devel lib.
polym
di mana Anda mendapatkan lvel devel sebagai file tar?
arrowill12
1
untuk mesin fedora saya, saya juga diharuskan untuk sudo yum install ncurses-devel selain sudo yum install libevent-devel
Mustakimur Rahman
6

Saya memiliki masalah yang sama pada RHEL 5.4 dan benar-benar menemukan libevent diinstal tetapi tidak ada symlink libevent.so, hanya versi nyata 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.soberfungsi cukup baik untuk saya tanpa perlu menginstal atau mengubah apa pun. Tidak tahu mengapa rpm RedHat tidak membuat symlink. Mungkin bug untuk dilaporkan?

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

cepal
sumber
Aku punya kesalahan yang sama persis: error: event.h: No such file or directory.
gkb0986
Saya menggunakan RHEL 6, dan saya baru saja mengunduh dan mengompilasi libevent, menginstalnya ke folder pengguna. Lalu saya menggunakan trik @ Stéphane Gimenez di atas untuk mengkompilasinya. Untuk berjalan, saya alias dengan trik LD_PRELOAD diberikan oleh @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Bekerja seperti pesona!
csl
1
Jika Anda menemukan diri Anda bermain-main dengan symlink atau secara manual menyalin sesuatu di direktori sistem, maka ada cara yang lebih baik untuk melakukannya.
Kusalananda
3

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 perpustakaan di lokasi non-standar, Anda dapat menggunakan variabel lingkungan LD_LIBRARY_PRELOADuntuk memberi tahu, di mana beberapa perpustakaan 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 exportpernyataan di .bashrc(jika bash adalah shell login Anda).

rozcietrzewiacz
sumber
Terima kasih, tetapi sayangnya ini tidak berhasil, pesan kesalahan yang sama. Nomor versi adalah libevent-2.0.12 yang seharusnya berfungsi
volker
Maka tampaknya ada masalah dengan kompilasi libevent Anda. Apa yang find .bin-libevent -name 'libevent.so*'ditunjukkan?
rozcietrzewiacz
$ find .bin-libevent -name 'libevent.so*'menemukan.bin-libevent/lib/libevent.so
volker
:) Maka Anda harus menunjuk pada direktori $HOME/.bin-libevent/lib(memperbarui jawabannya)
rozcietrzewiacz
Ya, saya khawatir saya sudah mencobanya juga, masih tidak ada perubahan. Saya cukup bingung dan frustrasi.
volker
1

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."
serv-inc
sumber
1
Saya juga memiliki kutukan yang diinstal ke lokasi kustom (saya bukan admin pada sistem target), dan tidak menyadari itu menginstal dirinya sendiri ke ncursessubdirektori dari jalur include / library apa pun yang Anda tentukan. Pilihan desain yang aneh. Ini memperbaikinya untuk saya.
wbadart
0

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 libevent-develpaket. 2. Instal ncurses-develpaket

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

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

Qian Zhang
sumber
Tidak yakin mengapa itu diturunkan. Itu memperbaiki masalah bagi saya pada sistem CentOS.
Dharmit
0

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_CFLAGSmenimpa pkg-configmencakup pengaturan untuk libevent, dan LIBEVENT_LIBSmenimpa pengaturan linker bendera.

Gabriel Southern
sumber
-3

Pada CentOS 6, kompilasi dan instal libevent di /opt/libeventdirektori dengan perintah:

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

Kemudian, instal aplikasi saya (dalam hal ini adalah PgBouncer)

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

Anda dapat mengubah direktori di mana pun Anda inginkan.

Cepxio
sumber