linuxinstallationlinkertmux

How to do runtime linking in make using LDFLAGS -R option, or some other way


This is a question on run time linking in make, in general.

I am trying to install tmux from source, on a linux system. It has dependency on "libevent" which I have installed in home dir. I am not the root on this system so I can't install it in system wide area.

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

Though above command works but I need to have $HOME/libevent included in the LD_LIBRARY_PATH all the time for tmux to work. I think there should be a better way.

I need a run time linking so that I don't have to mess with LD_LIBRARY_PATH. I read here http://www.ilkda.com/compile/Environment_Variables.htm that, this can be achieved using "-R" option.

./configure --prefix=$HOME/site/tmux/ CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib/" LDFLAGS="-R$DIR/lib/"

But this is not working and produces the following error: configure: error: "libevent not found"

Can someone let me know how to do run time linking in make while running configure script.


Solution

  • LDFLAGS="-L$DIR/lib/" LDFLAGS="-R$DIR/lib/"

    The sets LDFLAGS to -L$DIR/lib/, and then immediately overrides it with -R$DIR/lib/, not unlike x = 1; x = 2; results in x == 2.

    What you want is: LDFLAGS="-L$DIR/lib/ -R$DIR/lib/"

    "libevent not found"

    I trusted you to read the man page, but you didn't. The -R flag means RUNPATH to linker on Solaris, but it means something else to Linux linker.

    What you want then is:

    LDFLAGS="-L$DIR/lib/ -Wl,--rpath=$DIR/lib/"