linux - 如何使用 LDFLAGS -R 选项或其他方式在 make 中进行运行时链接

标签 linux compiler-construction linker installation tmux

一般来说,这是关于 make 中运行时链接的问题。

我正在尝试在 Linux 系统上从源代码安装 tmux。它依赖于我在主目录中安装的“libevent”。我不是这个系统的 root,所以我不能在系统范围内安装它。

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

虽然上面的命令有效,但我需要一直将 $HOME/libevent 包含在 LD_LIBRARY_PATH 中,tmux 才能正常工作。我认为应该有更好的方法。

我需要一个运行时链接,这样我就不必弄乱 LD_LIBRARY_PATH。我在这里阅读http://www.ilkda.com/compile/Environment_Variables.htm也就是说,这可以使用“-R”选项来实现。

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

但这不起作用并产生以下错误: 配置:错误:“找不到libevent”

谁能告诉我如何在运行配置脚本时在 make 中进行运行时链接。

最佳答案

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

LDFLAGS 设置为 -L$DIR/lib/,然后立即-R$DIR/覆盖它lib/,与 x = 1 不同; x = 2; 结果为 x == 2

你想要的是:LDFLAGS="-L$DIR/lib/-R$DIR/lib/"

"libevent not found"

我相信你会阅读手册页,但你没有。 -R 标志对 Solaris 上的链接器意味着 RUNPATH,但对于 Linux 链接器它意味着其他

那么你想要的是:

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

关于linux - 如何使用 LDFLAGS -R 选项或其他方式在 make 中进行运行时链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254820/

相关文章:

c++ - 如何在 Linux 中检测系统时间的变化?

generics - Ada 泛型和汇编代码生成

delphi - 使用 Delphi 6 编译两次并在二进制文件上获得相同的校验和

c++ - Qt - 编译错误 : Couldn't change working directory

linux原始以太网套接字绑定(bind)到特定协议(protocol)

linux - 如何删除文件名中的转义字符?

linux - 使用 automake 设置每个文件的标志

c# - C# 编译器中的已知错误列表

c++ - 编译器可以对类似的模板类成员函数执行全局优化吗?

language-agnostic - 为什么静态和动态可链接库不同?