Почему не может gcc находить libevent при создании tmux из источника?

Можно использовать getent, который идет glibc (таким образом, у Вас почти наверняка есть он на Linux). Это разрешает использование gethostbyaddr/gethostbyname2 и так также проверит /etc/hosts/NIS/etc:

getent hosts unix.stackexchange.com | awk '{ print $1 }'

Или, как Heinzi заявил ниже, можно использовать dig с +short аргумент (запрашивает серверы DNS непосредственно, не смотрит на /etc/hosts/NSS/etc):

dig +short unix.stackexchange.com

Если dig +short недоступно, любое из следующего должно работать. Все они запрашивают DNS непосредственно и игнорируют другие средства разрешения:

host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'

Если Вы хотите только распечатать один IP, то добавьте exit команда к awkрабочий процесс.

dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'
68
02.08.2011, 23:48
8 ответов

Попытка:

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

(Я уверен, что должен быть лучший способ настроить пути к библиотеке с автоконференцией. Обычно существует a --with-libevent=dir опция. Но здесь, кажется, что нет такой опции.)

63
27.01.2020, 19:31
  • 1
    Это - подход, который сделал make наконец работа. Я пытался установить другие переменные среды и установить prefix и exec-prefix, но после того как я включал эти флаги материал, на самом деле был создан. –  wizonesolutions 10.01.2013, 18:34
  • 2
    Как я пошел бы об определении нескольких каталогов для флагов? Я попробовал ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir" но никакой успех –  lucaswxp 22.08.2015, 22:12
  • 3
    @lucaswxp CFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb" –  Kusalananda♦ 29.07.2016, 11:28

Перед конфигурацией и компиляцией tmux (или любая программа) необходимо сказать это, где это может найти библиотеки, этому нужно. При установке некоторой библиотеки в нестандартном месте можно использовать переменную окружения LD_LIBRARY_PRELOAD сказать, где некоторые библиотеки расположены.

Я Ваш случай:

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

И затем продолжайте конфигурацию/компиляцию.

Позже, двоичный файл должен будет также знать, где Ваши дополнительные библиотеки могут быть найдены, таким образом, необходимо будет поместить export оператор в Вашем .bashrc (если удар является Вашей оболочкой входа в систему).

3
27.01.2020, 19:31
  • 1
    Спасибо, но печально это не работает, то же сообщение об ошибке. Номер версии является libevent-2.0.12, который должен работать –  volker 02.08.2011, 20:22
  • 2
    Затем кажется, что существует проблема с Вашей libevent компиляцией. Что делает find .bin-libevent -name 'libevent.so*' показать? –  rozcietrzewiacz 02.08.2011, 20:42
  • 3
    $ find .bin-libevent -name 'libevent.so*' находит .bin-libevent/lib/libevent.so –  volker 02.08.2011, 20:47
  • 4
    :) затем необходимо указать на каталог $HOME/.bin-libevent/lib (обновленный ответ) –  rozcietrzewiacz 02.08.2011, 20:48
  • 5
    Да, я боюсь, что уже попробовал это также, все еще никакое изменение. Я вполне озадачен и расстроен. –  volker 02.08.2011, 20:59

Я имел ту же проблему о RHEL 5.4 и на самом деле нашел, что libevent установлен, но нет никакой libevent.so символьной ссылки, только реальная версия библиотеки:

/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 работы вполне прилично для меня без потребности установить или изменить что-либо. Никакая идея, почему libevent об/мин Redhat не создал символьную ссылку. Возможно, ошибка для создания отчетов?

Но теперь, это жалуется для этого: error: event.h: No such file or directory.

6
27.01.2020, 19:31
  • 1
    я получил ту же точную ошибку: error: event.h: No such file or directory. –  gkb0986 07.08.2013, 21:00
  • 2
    , я нахожусь на RHEL 6, и я просто загрузил и скомпилировал libevent, установив ее на пользовательской папке. Затем я использовал прием @Stéphane Gimenez выше для получения его компиляция. Для получения его выполнение я искажаю с приемом LD_PRELOAD, данным @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Работы как очарование! –  csl 04.12.2014, 17:00
  • 3
    Если Вы бездельничаете с символьными ссылками или вручную копировать вещи вокруг в системных каталогах, то существует лучший способ сделать его. –  Kusalananda♦ 29.07.2016, 11:30

Я имел подобную проблему и обнаружил что после выполнения sudo yum install libevent-devel Я смог успешно сделать и установить tmux.

Править: При установке этого на машине Red Hat необходимо будет также посетить выбор каналов для сервера в Сети Red Hat и добавить Сервер RHEL Дополнительный канал. Это предоставит Вам доступ к-devel пакетам для libevent (основные и дополнительные каналы не обеспечивают его).

9
27.01.2020, 19:31
  • 1
    Это было бы нормальным способом зафиксировать его, но в этом случае это была "машина, где у меня нет корневого доступа" –  Michael Mrozek♦ 28.11.2012, 17:21
  • 2
    Это помогло мне. Я не был корнем, и я не установил lib дьявола. команда –  polym 13.07.2014, 12:23
  • 3
    , где Вы получаете lib дьявола как файл tar? –  arrowill12 04.11.2014, 20:18
  • 4
    для моей фетровой машины, я также потребовал к sudo вкусной установке ncurses-devel помимо sudo вкусных довольно интересных звуков libevent-devel –  Mustakimur Rahman 01.09.2016, 04:36

В CentOS 6 скомпилируйте и установите libevent в каталог / opt / libevent с помощью команды:

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

Затем установите мое приложение (в данном случае PgBouncer)

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

Йо Вы можете менять каталоги, где хотите.

-3
27.01.2020, 19:31

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

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

Первый не решит проблему event.h , а второй решит проблему не удается найти проклятия. Кстати, описанный выше метод softlink также работает для меня во время ./ configure .

0
27.01.2020, 19:31

Hay una esencia enhttps://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
27.01.2020, 19:31

Принятый ответ хорош, но, по крайней мере, в 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переопределяет настройки флага компоновщика.

1
27.01.2020, 19:31

Теги

Похожие вопросы