Why can't gcc find libevent when building tmux from source?
Solution 1
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.)
Solution 2
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).
Solution 3
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
.
Solution 4
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).
Solution 5
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.
Related videos on Youtube
volker
Updated on September 18, 2022Comments
-
volker over 1 year
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 withconfigure: error: "libevent not found"
, even though I tried to point to the libevent directory in theMakefile.am
by modifyingLDFLAGS
andCPPFLAGS
, but nothing seems to work.How can I tell the system to look in my home dir for the libevent?
-
Chili over 6 yearsIf you are on RHEL 6.x, there is a pre-compiled tmux in the repos.
-
-
volker over 12 yearsThanks, but sadly this doesn't work, same error message. The version number is libevent-2.0.12 which should work
-
rozcietrzewiacz over 12 yearsThen it seems there is a problem with your libevent compilation. What does
find .bin-libevent -name 'libevent.so*'
show? -
volker over 12 years
$ find .bin-libevent -name 'libevent.so*'
finds.bin-libevent/lib/libevent.so
-
rozcietrzewiacz over 12 years:) Then you should point at the directory
$HOME/.bin-libevent/lib
(updated the answer) -
volker over 12 yearsYes, I am afraid I already tried that as well, still no change. I am quite puzzled and frustrated.
-
Daniel Serodio over 12 yearsThe OP didn't mention which *nix he's using. On OSX, DYLD_LIBRARY_PATH is equivalent to LD_LIBRARY_PATH on Linux.
-
Michael Mrozek over 11 yearsThis would be the normal way to fix it, but in this case it was "a machine where I don't have root access"
-
Martin Geisse over 11 yearsThis is the approach that made
make
finally work. I tried setting other environment variables and settingprefix
andexec-prefix
, but once I included these flags stuff actually got built. -
gkb0986 over 10 yearsI got the same exact error:
error: event.h: No such file or directory
. -
polym almost 10 yearsThis helped me. I wasn't root and I hadn't installed the devel lib.
-
arrowill12 over 9 yearswhere do you get the devel lib as a tar file?
-
csl over 9 yearsI'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! -
lucaswxp over 8 yearsHow 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 -
Kusalananda over 7 years@lucaswxp
CFLAGS="-Idir1 -Idir2 -Idir3" LDFLAGS="-Ldira -Ldirb -Ldirb"
-
Kusalananda over 7 yearsIf 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 over 7 years
LD_LIBRARY_PRELOAD
is used when executing a binary. It is pretty useless for telling a linker where to find a library. -
Mustakimur Khandaker over 7 yearsfor my fedora machine, I also required to sudo yum install ncurses-devel besides sudo yum install libevent-devel
-
luofeiyu over 7 yearsNot sure why it got downvoted. It fixed the issue for me on a CentOS system.
-
axolotl almost 6 yearsI used this answer and the
libevent not found
error went away, but now I get the same withncurses
:curses not found
. Mylibevent
as well asncurses
installations are both in$HOME/.local/
-
Jongsu Liam Kim about 5 yearsFor
libevent
, useLIBEVENT_CFLAGS
andLIBEVENT_LIBS
instead ofCFLASG
andLDFLAGS
. Forncurse
, useLIBTINFO_CFLAGS
andLIBTINFO_LIBS
@Aalok -
wbadart about 5 yearsI 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. -
ansonl over 4 yearsThis worked for me, but how does this work versus putting $HOME in the flag directly?