it-swarm-vi.com

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?

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ó trong $HOME/.bin-libevent và bây giờ tôi muốn biên dịch tmux, nhưng cấu hình luôn kết thúc bằng configure: error: "libevent not found", mặc dù tôi đã cố gắng trỏ đến thư mục libevent trong Makefile.am bằng cách sửa đổi LDFLAGSCPPFLAGS, nhưng dườ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?

68
volker

Thử:

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

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

64
Stéphane Gimenez

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-devel Tô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ó).

9
Snap Shot

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ì thế, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so hoạt động khá tốt đối với tôi mà không cần phải cài đặt hay thay đổi gì cả. 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.

6
cepal

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 câu lệnh export trong .bashrc (Nếu bash là Shell đăng nhập của bạn).

3
rozcietrzewiacz

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
serv-inc

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

Biến môi trường LIBEVENT_CFLAGS ghi đè pkg-config bao gồm các cài đặt cho libevent và LIBEVENT_LIBS ghi đè cài đặt cờ liên kết.

0
Gabriel Southern

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-devel gói. 2. Cài đặt ncurses-devel gói

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

Đầu tiên sẽ giải quyết không event.h vấ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 suốt ./configure.

0
Qian Zhang