Tại sao gcc không thể tìm thấy sự thỏa mãn khi xây dựng tmux từ nguồn?


68

Tôi muốn cài đặt tmux trên máy mà tôi không có quyền truy cập root. Tôi đã biên dịch libevent và cài đặt nó vào $HOME/.bin-libeventvà bây giờ tôi muốn biên dịch tmux, nhưng cấu hình luôn kết thúc configure: error: "libevent not found", mặc dù tôi đã cố gắng trỏ đến thư mục libevent trong Makefile.ambằng cách sửa đổi LDFLAGSCPPFLAGSdường như không có gì hoạt động.

Làm thế nào tôi có thể nói với hệ thống để tìm trong thư mục nhà của tôi cho người không tốt?


Một cách khác là điều tra dtach . Tiện dụng khi bạn muốn các phiên có thể tháo rời, nhưng không có root và không có thời gian để biên dịch tĩnh tmux.
Sonia Hamilton

Nếu bạn đang sử dụng RHEL 6.x, có một tmux được biên dịch sẵn trong repos.
Chili

Câu trả lời:


63

Thử:

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

(Tôi chắc chắn phải có một cách tốt hơn để định cấu hình đường dẫn thư viện với autoconf. Thông thường có một --with-libevent=dirtùy chọn. Nhưng ở đây, dường như không có tùy chọn nào như vậy.)


4
Đây là cách tiếp cận makecuối cùng đã làm việc. Tôi đã cố gắng thiết lập các biến môi trường khác và thiết lập prefixexec-prefix, nhưng một khi tôi bao gồm những lá cờ nhét thực sự đã được xây dựng.
wizonesolutions

Làm thế nào tôi sẽ đi về việc chỉ định nhiều thư mục cho các cờ? Tôi đã thử ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir"nhưng không thành công
lucaswxp

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

Tôi đã sử dụng câu trả lời này và libevent not foundlỗi đã biến mất, nhưng bây giờ tôi nhận được cùng với ncurses: curses not found. Cả cài đặt của tôi libeventcũng như ncursestrong$HOME/.local/
Aalok

Cho libevent, sử dụng LIBEVENT_CFLAGSLIBEVENT_LIBSthay vì CFLASGLDFLAGS. Cho ncurse, sử dụng LIBTINFO_CFLAGSLIBTINFO_LIBS@Aalok
Liam Kim

9

Tôi đã gặp một vấn đề tương tự và phát hiện ra rằng sau khi chạy sudo yum install libevent-develtôi đã có thể thực hiện và cài đặt thành công tmux.

EDIT: Nếu bạn đang cài đặt cái này trên máy Red Hat, bạn cũng sẽ cần truy cập vào lựa chọn kênh cho máy chủ của mình trên Mạng Red Hat và thêm kênh Tùy chọn Máy chủ RHEL. Điều này sẽ cung cấp cho bạn quyền truy cập vào các gói -devel cho người không thích hợp (các kênh cơ sở và bổ sung không cung cấp nó).


3
Đây sẽ là cách bình thường để sửa nó, nhưng trong trường hợp này là "một cỗ máy mà tôi không có quyền truy cập root"
Michael Mrozek

Điều này đã giúp tôi. Tôi đã không root và tôi đã không cài đặt lib phát.
polym

nơi nào bạn nhận được lib devel như một tập tin tar?
Arrowill12

1
đối với máy fedora của tôi, tôi cũng yêu cầu sudo yum cài đặt ncurses-devel bên cạnh sudo yum cài đặt libevent-devel
Mustakimur Rahman

6

Tôi đã gặp vấn đề tương tự trên RHEL 5.4 và thực sự tìm thấy libevent đã được cài đặt nhưng không có symlink libevent.so, chỉ có phiên bản thực của thư viện:

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

Vì vậy, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.sohoạt động khá tốt đối với tôi mà không cần phải cài đặt hoặc thay đổi bất cứ điều gì. Không có lý do tại sao vòng tua tuyệt vời của RedHat không tạo ra liên kết tượng trưng. Có lẽ một lỗi để báo cáo?

Nhưng bây giờ, nó đang phàn nàn về điều này : error: event.h: No such file or directory.


Tôi đã nhận được cùng một lỗi chính xác : error: event.h: No such file or directory.
gkb0986

Tôi đang sử dụng RHEL 6 và tôi vừa tải xuống và biên dịch miễn phí, cài đặt nó vào thư mục người dùng. Sau đó, tôi đã sử dụng thủ thuật của @ Stéphane Gimenez ở trên để biên dịch nó. Để chạy nó, tôi đặt bí danh với thủ thuật LD_PRELOAD được cung cấp bởi @rozcietrzewiacz : tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Hoạt động như một lá bùa!
csl

1
Nếu bạn thấy mình đang loay hoay với các liên kết tượng trưng hoặc sao chép thủ công mọi thứ xung quanh trong các thư mục hệ thống, thì có một cách tốt hơn để làm điều đó.
Kusalananda

3

Trước khi cấu hình và biên dịch tmux (hoặc bất kỳ chương trình nào), bạn cần cho nó biết nơi nó có thể tìm thấy các thư viện cần thiết. Nếu bạn đã cài đặt một số thư viện ở một vị trí không chuẩn, bạn có thể sử dụng biến môi trường LD_LIBRARY_PRELOADđể cho biết, nơi một số thư viện được đặt.

Tôi là trường hợp của bạn:

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

Và sau đó tiếp tục với cấu hình / biên dịch.

Sau này, nhị phân cũng sẽ cần biết nơi các thư viện bổ sung của bạn có thể được tìm thấy, vì vậy bạn sẽ cần đặt exportcâu lệnh trong .bashrc(nếu bash là vỏ đăng nhập của bạn).


Cảm ơn, nhưng thật đáng buồn là điều này không hoạt động, cùng một thông báo lỗi. Số phiên bản là libevent-2.0.12 sẽ hoạt động
volker

Sau đó, có vẻ như có một vấn đề với việc biên dịch miễn cưỡng của bạn. Không find .bin-libevent -name 'libevent.so*'thể hiện điều gì?
rozcietrzewiacz

$ find .bin-libevent -name 'libevent.so*'tìm thấy.bin-libevent/lib/libevent.so
volker

:) Sau đó, bạn nên trỏ vào thư mục $HOME/.bin-libevent/lib(cập nhật câu trả lời)
rozcietrzewiacz

Vâng, tôi sợ rằng tôi cũng đã thử điều đó, vẫn không thay đổi. Tôi khá hoang mang và thất vọng.
volker

1

Có một ý chính tại 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
Tôi cũng đã cài đặt các lời nguyền vào một vị trí tùy chỉnh (tôi không phải là quản trị viên trên hệ thống đích) và tôi không nhận ra nó tự cài đặt vào ncursesthư mục con của bất kỳ đường dẫn thư viện / thư viện nào bạn chỉ định. Lựa chọn thiết kế lạ. CÁi này đã sửa nó giúp tôi.
wbadart

0

Tôi có cùng một vấn đề và có vẻ như câu trả lời được đánh giá cao nhất đã không làm việc cho tôi. Tôi đang sử dụng máy trạm Fedora 22. Đây là những gì tôi đã làm để khắc phục điều này: 1. Cài đặt libevent-develgói. 2. Cài đặt ncurses-develgói

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

Đầu tiên sẽ giải quyết không có event.hvấn đề và thứ hai sẽ giải quyết không thể tìm thấy vấn đề nguyền rủa. BTW, phương pháp liên kết mềm ở trên cũng hoạt động với tôi trong thời gian ./configure.


Không chắc chắn tại sao nó bị hạ cấp. Nó đã khắc phục sự cố cho tôi trên hệ thống CentOS.
Dharmit

0

Câu trả lời được chấp nhận là tốt, nhưng ít nhất là tmux 2.8 có hỗ trợ cho việc chỉ định vị trí phù hợp bằng cách sử dụng các biến môi trường.

Đầu tiên cài đặt libevent ở vị trí mong muốn. Tôi đã sử dụng cmake vì tôi gặp vấn đề với autoconf

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

Sau đó, xây dựng và cài đặt tmux:

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

Ghi LIBEVENT_CFLAGSđè biến môi trường pkg-configbao gồm các cài đặt cho libevent và LIBEVENT_LIBSghi đè cài đặt cờ liên kết.


-3

Trên CentOS 6, biên dịch và cài đặt libevent trong /opt/libeventthư mục bằng lệnh:

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

Sau đó, cài đặt ứng dụng của tôi (trong trường hợp này là PGBouncer)

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

Bạn có thể thay đổi các thư mục bất cứ nơi nào bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.