ทำไม gcc ไม่พบคำว่า libevent เมื่อสร้าง tmux จากซอร์ส?


68

ฉันต้องการติดตั้ง tmux บนเครื่องที่ฉันไม่มีสิทธิ์เข้าถึงรูต ฉันได้รวบรวม libevent และติดตั้งแล้ว$HOME/.bin-libeventและตอนนี้ฉันต้องการรวบรวม tmux แต่การกำหนดค่ามักจะจบลงด้วยconfigure: error: "libevent not found"แม้ว่าฉันพยายามที่จะชี้ไปที่ไดเรกทอรี libevent ในMakefile.amโดยการปรับเปลี่ยนLDFLAGSและCPPFLAGSแต่ดูเหมือนว่าจะไม่มีอะไรทำงาน

ฉันจะบอกให้ระบบค้นหาผู้ใช้ที่บ้านของฉันเพื่อหาคนเก็บตัวได้อย่างไร


ทางเลือกคือการตรวจสอบdtach มีประโยชน์เมื่อคุณต้องการเซสชันที่ถอดออกได้ แต่ไม่มีรูตและไม่มีเวลาในการคอมไพล์ tmux แบบสแตติก
Sonia Hamilton

หากคุณใช้ RHEL 6.x มี tmux ที่คอมไพล์แล้วใน repos
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_CFLAGSและLIBTINFO_LIBS@Aalok
Jongsu Liam Kim

9

ฉันมีปัญหาที่คล้ายกันและพบว่าหลังจากทำงานsudo yum install libevent-develฉันสามารถสร้างและติดตั้ง tmux ได้สำเร็จ

แก้ไข: หากคุณกำลังติดตั้งสิ่งนี้บนเครื่อง Red Hat คุณจะต้องไปที่การเลือกช่องทางสำหรับเซิร์ฟเวอร์ของคุณในเครือข่าย Red Hat และเพิ่มช่องทางเพิ่มเติม RHEL Server สิ่งนี้จะช่วยให้คุณสามารถเข้าถึงแพ็คเกจ -devel สำหรับ libevent (ช่องฐานและช่องเสริมไม่ได้ให้มา


3
นี่จะเป็นวิธีปกติในการแก้ไข แต่ในกรณีนี้มันเป็น "เครื่องที่ฉันไม่สามารถเข้าถึงรูต"
Michael Mrozek

สิ่งนี้ช่วยฉัน ฉันไม่ได้รูทและฉันไม่ได้ติดตั้ง devel lib
polym

คุณจะได้รับ devel lib เป็นไฟล์ tar ที่ไหน?
arrowill12

1
สำหรับเครื่อง fedora ของฉันฉันยังต้องติดตั้ง sudo yum ncurses-devel นอกเหนือจาก sudo yum ติดตั้ง libevent-devel
Mustakimur Rahman

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 จึงไม่สร้าง symlink อาจเป็นข้อผิดพลาดในการรายงาน?

error: event.h: No such file or directoryแต่ตอนนี้มันบ่นสำหรับการนี้:


ฉันได้รับข้อผิดพลาดที่แน่นอนเหมือนกัน: error: event.h: No such file or directory.
gkb0986

ฉันใช้ RHEL 6 และฉันเพิ่งดาวน์โหลดและรวบรวม libevent ติดตั้งในโฟลเดอร์ผู้ใช้ จากนั้นฉันก็ใช้เคล็ดลับของ @ Stéphane Gimenez ด้านบนเพื่อรวบรวมมัน ที่จะได้รับมันทำงานผมชื่อแทนด้วยเคล็ดลับ LD_PRELOAD ที่กำหนดโดย tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'@rozcietrzewiacz: ทำงานเหมือนจับใจ!
csl

1
หากคุณพบว่าตัวเองยุ่งเหยิงไปกับ symlink หรือคัดลอกสิ่งต่าง ๆ ในไดเรกทอรีของระบบด้วยตนเองก็จะมีวิธีที่ดีกว่า
Kusalananda

3

ก่อนการกำหนดค่าและการคอมไพล์ของ tmux (หรือโปรแกรมใด ๆ ) คุณต้องบอกว่ามันสามารถหาไลบรารี่ที่ต้องการได้ที่ไหน หากคุณติดตั้งบางไลบรารีในตำแหน่งที่ไม่ได้มาตรฐานคุณสามารถใช้ตัวแปรสภาพแวดล้อมLD_LIBRARY_PRELOADเพื่อบอกตำแหน่งที่ตั้งของห้องสมุดบางแห่ง

ฉันเป็นกรณีของคุณ:

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

จากนั้นไปที่การกำหนดค่า / การคอมไพล์

หลังจากนั้นไบนารีจะต้องทราบว่าจะหาไลบรารี่เพิ่มเติมของคุณได้จากที่ใดดังนั้นคุณจะต้องวางexportคำสั่งไว้ใน.bashrc(ถ้า bash คือเชลล์ล็อกอินของคุณ)


ขอบคุณ แต่น่าเศร้าที่มันไม่ทำงานข้อความแสดงข้อผิดพลาดเดียวกัน หมายเลขเวอร์ชันคือ 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

ฉันมีปัญหาเดียวกันและดูเหมือนว่าคำตอบที่ upvoted ที่สุดไม่ทำงานสำหรับฉัน ฉันใช้ Fedora 22 Workstation นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหานี้: 1. ติดตั้งlibevent-develแพคเกจ 2. ติดตั้งncurses-develแพ็คเกจ

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

คนแรกจะแก้ปัญหาไม่ได้event.hและที่สองจะแก้ปัญหาไม่สามารถหาคำสาป BTW วิธี softlink ด้านบนใช้ได้กับฉัน./configureด้วย


ไม่แน่ใจว่าทำไมมันถึงได้ลงคะแนน มันแก้ไขปัญหาสำหรับฉันในระบบ CentOS
Dharmit

0

คำตอบที่ได้รับการยอมรับนั้นดี แต่อย่างน้อย tmux 2.8 มีการสนับสนุนสำหรับการระบุตำแหน่งของ libevent โดยใช้ตัวแปรสภาพแวดล้อม

ก่อนติดตั้ง libevent ในตำแหน่งที่ต้องการ ฉันใช้ cmake เพราะฉันมีปัญหากับ autoconf

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 ให้คอมไพล์และติดตั้ง libevent ใน/opt/libeventไดเร็กทอรีด้วยคำสั่ง:

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

จากนั้นติดตั้ง aplication ของฉัน (ในกรณีนี้คือ PgBouncer)

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

คุณสามารถเปลี่ยนไดเรกทอรีได้ทุกที่ที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.