70

I want to install tmux on a machine where I don't have root access. I already compiled libevent and installed it in $HOME/.bin-libevent and now I want to compile tmux, but configure always ends with configure: error: "libevent not found", even though I tried to point to the libevent directory in the Makefile.am by modifying LDFLAGS and CPPFLAGS, but nothing seems to work.

How can I tell the system to look in my home dir for the libevent?

2
  • An alternative is to investigate dtach. Handy when you want detachable sessions, but don't have root and don't have time to statically compile tmux. Mar 22, 2016 at 11:36
  • If you are on RHEL 6.x, there is a pre-compiled tmux in the repos.
    – Chili
    Aug 25, 2017 at 13:57

8 Answers 8

66

Try:

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

(I'm sure there must be a better way to configure library paths with autoconf. Usually there is a --with-libevent=dir option. But here, it seems there is no such option.)

6
  • 4
    This is the approach that made make finally work. I tried setting other environment variables and setting prefix and exec-prefix, but once I included these flags stuff actually got built. Jan 10, 2013 at 16:34
  • How would I go about specifying multiple directories for the flags? I tried ./configure CFLAGS="-I$DIR/include:/usr/otherdir" LDFLAGS="-L$DIR/lib:/usr/otherdir" but no success
    – lucaswxp
    Aug 22, 2015 at 19:12
  • 1
    @lucaswxp CFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
    – Kusalananda
    Jul 29, 2016 at 8:28
  • I used this answer and the libevent not found error went away, but now I get the same with ncurses: curses not found. My libevent as well as ncurses installations are both in $HOME/.local/
    – axolotl
    Jul 27, 2018 at 17:28
  • For libevent, use LIBEVENT_CFLAGS and LIBEVENT_LIBS instead of CFLASG and LDFLAGS. For ncurse, use LIBTINFO_CFLAGS and LIBTINFO_LIBS @Aalok Feb 25, 2019 at 11:52
9

I was having a similar problem and discovered that after running sudo yum install libevent-devel I was able to successfully make and install tmux.

EDIT: If you are installing this on a Red Hat machine, you will also need to visit the channels selection for your server on the Red Hat Network and add the RHEL Server Optional channel. This will give you access to the -devel packages for libevent (the base and supplementary channels do not provide it).

4
  • 3
    This would be the normal way to fix it, but in this case it was "a machine where I don't have root access" Nov 28, 2012 at 15:21
  • This helped me. I wasn't root and I hadn't installed the devel lib.
    – polym
    Jul 13, 2014 at 9:23
  • where do you get the devel lib as a tar file?
    – arrowill12
    Nov 4, 2014 at 18:18
  • 1
    for my fedora machine, I also required to sudo yum install ncurses-devel besides sudo yum install libevent-devel Sep 1, 2016 at 1:36
7

I had the same issue on RHEL 5.4 and actually found libevent is installed but there is no libevent.so symlink, only the real version of the library:

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

So, ln -s /usr/lib64/libevent-1.1a.so.1 /usr/lib64/libevent.so works pretty well for me without the need to install or alter anything. No idea why RedHat's libevent rpm didn't create the symlink. Maybe a bug to report?

But now, it's complaining for this: error: event.h: No such file or directory.

3
  • I got the same exact error: error: event.h: No such file or directory.
    – gkb0986
    Aug 7, 2013 at 18:00
  • 1
    I'm on RHEL 6, and I just downloaded and compiled libevent, installing it to a user folder. Then I used @Stéphane Gimenez's trick above to get it compiling. To get it running, I aliases with the LD_PRELOAD trick given by @rozcietrzewiacz: tmux='LD_PRELOAD=/opt-local/lib/libevent-2.0.so.5 /opt-local/bin/tmux'. Works like a charm!
    – csl
    Dec 4, 2014 at 15:00
  • 1
    If you find yourself messing around with symlinks or manually copying things around in system directories, then there is a better way of doing it.
    – Kusalananda
    Jul 29, 2016 at 8:30
3

Before the configuration and compilation of tmux (or any program) you need to tell it where it can find the libraries it needs. If you have installed some library in a non-standard location, you can use the environmental variable LD_LIBRARY_PRELOAD to tell, where some libraries are located.

I your case:

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

And then go on with the configuration/compilation.

Later on, the binary will also need to know where your additional libraries can be found, so you'll need to place the export statement in your .bashrc (if bash is your login shell).

7
  • Thanks, but sadly this doesn't work, same error message. The version number is libevent-2.0.12 which should work
    – volker
    Aug 2, 2011 at 17:22
  • Then it seems there is a problem with your libevent compilation. What does find .bin-libevent -name 'libevent.so*' show? Aug 2, 2011 at 17:42
  • $ find .bin-libevent -name 'libevent.so*' finds .bin-libevent/lib/libevent.so
    – volker
    Aug 2, 2011 at 17:47
  • :) Then you should point at the directory $HOME/.bin-libevent/lib (updated the answer) Aug 2, 2011 at 17:48
  • Yes, I am afraid I already tried that as well, still no change. I am quite puzzled and frustrated.
    – volker
    Aug 2, 2011 at 17:59
1

There's a gist at 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
  • 1
    I also had curses installed to a custom location (I'm not an admin on the target system), and didn't realize it installs itself to the ncurses subdirectory of whatever include/ library path you specify. Odd design choice. This fixed it for me.
    – wbadart
    Mar 15, 2019 at 18:59
1

The accepted answer is good, but as of at least tmux 2.8 there is support for specifying libevent location using environment variables.

First install libevent in desired location. I used cmake because I had a problem with autoconf

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

Then build and install tmux:

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

The environment variable LIBEVENT_CFLAGS overrides pkg-config include settings for libevent, and LIBEVENT_LIBS overrides the linker flag settings.

0

I have the same problem and it seems the most upvoted answer didn't work for me. I am using Fedora 22 Workstation. Here is what I did to fix this: 1. Install libevent-devel package. 2. Install ncurses-devel package

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

First one will solve no event.h problem and second will solve cannot find curses problem. BTW, the softlink method above also works for me during ./configure.

1
  • Not sure why it got downvoted. It fixed the issue for me on a CentOS system.
    – Dharmit
    Oct 4, 2016 at 6:51
-3

On CentOS 6, compile and install libevent in /opt/libevent directory with the command:

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

Then, install my aplication (in this case was PgBouncer)

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

You can change the directories wherever you want.

Not the answer you're looking for? Browse other questions tagged or ask your own question.