Чому gcc не може знайти libevent, будуючи tmux з джерела?


68

Я хочу встановити tmux на машину, де у мене немає доступу до кореня. Я вже скомпільовані Libevent і встановив його в $HOME/.bin-libeventі тепер я хочу , щоб скомпілювати tmux, але настройки завжди закінчується configure: error: "libevent not found", хоча я намагався вказати на каталог Libevent в Makefile.amмодифікуючи LDFLAGSі CPPFLAGS, але нічого не схоже на роботу.

Як я можу сказати системі шукати у своєму домашньому режисері для визволеного?


Альтернативою є дослідження dtach . Зручно, коли ви хочете знімних сеансів, але не маєте root і не встигаєте статично компілювати tmux.
Соня Гамільтон

Якщо ви перебуваєте на RHEL 6.x, у попередньому репозиторії є попередньо складений tmux.
Чилі

Відповіді:


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.

EDIT: Якщо ви встановлюєте це на машині Red Hat, вам також потрібно буде відвідати вибір каналів для вашого сервера в мережі Red Hat і додати додатковий канал сервера RHEL. Це надасть вам доступ до пакетів -devel для libevent (базові та додаткові канали не забезпечують це).


3
Це було б нормальним способом виправити це, але в цьому випадку це була "машина, до якої у мене немає кореневого доступу"
Michael Mrozek

Це мені допомогло. Я не був root, і я не встановив розробку.
полим

звідки ви дістаєте lib devel як файл смоли?
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 не створив симпосилання. Може, помилка повідомити?

Але тепер, скаржиться на це: error: event.h: No such file or directory.


У мене точно такі ж помилки: error: event.h: No such file or directory.
gkb0986

Я на RHEL 6, і я просто завантажив і компілював libevent, встановивши його в папку користувача. Тоді я використав трюк @ Stéphane Gimenez вище, щоб домогтися його складання. Для того, щоб отримати це працює, псевдоніми I з LD_PRELOAD трюку дається @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Працює як шарм!
csl

1
Якщо ви виявите, що ви заплутуєтесь із посиланнями або копіюєте речі вручну в системних каталогах, то є кращий спосіб зробити це.
Kusalananda

3

Перед конфігурацією та компіляцією tmux (або будь-якої програми) вам потрібно повідомити, де він може знайти потрібні йому бібліотеки. Якщо ви встановили деяку бібліотеку в нестандартному місці, ви можете використовувати змінну навколишнього середовища, LD_LIBRARY_PRELOADщоб вказати, де розташовані деякі бібліотеки.

Я ваш випадок:

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

А потім продовжуйте конфігурацію / компіляцію.

Згодом двійковий файл також повинен знати, де можна знайти ваші додаткові бібліотеки, тож вам потрібно буде розмістити exportоператор у своїй .bashrc(якщо bash - ваша оболонка для входу).


Дякую, але, на жаль, це не працює, те саме повідомлення про помилку. Номер версії - libevent-2.0.12, який повинен працювати
волкер

Тоді, здається, є проблема з вашою ліберальною компіляцією. Що find .bin-libevent -name 'libevent.so*'показує?
rozcietrzewiacz

$ find .bin-libevent -name 'libevent.so*'знахідки.bin-libevent/lib/libevent.so
волкер

:) Тоді вам слід вказати на каталог $HOME/.bin-libevent/lib(оновлена ​​відповідь)
rozcietrzewiacz

Так, я боюся, що я вже пробував це, але все одно ніяких змін. Я досить спантеличений і розчарований.
волкер

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

У мене така ж проблема, і, здається, найбільш відповідна відповідь не спрацювала для мене. Я використовую робочу станцію Fedora 22. Ось що я зробив, щоб виправити це: 1. Встановити libevent-develпакет. 2. Встановити ncurses-develпакет

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

Перший вирішить не event.hпроблему, а другий вирішить проблему прокляття не знайде. До речі, вищезгаданий метод також працює для мене ./configure.


Не впевнений, чому це було знижено. Це вирішило проблему для мене в системі CentOS.
Дхарміт

0

Прийнята відповідь хороша, але, щонайменше, tmux 2.8, є підтримка для вказівки розташування, що використовуються, використовуючи змінні середовища.

Спочатку встановіть 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

Потім встановіть мою заявку (в даному випадку це був PgBouncer)

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

Ви можете змінювати каталоги де завгодно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.