如何针对自定义构建的“libevent”构建“tmux”?

问题描述 投票:0回答:1

我正在一个相当常规的 Linux 主机上从源代码构建

tmux-2.0
。第一次尝试失败了,因为安装的
libevent
版本比所需的版本旧,所以我首先从源代码(撰写本文时为当前版本)下载并构建
libevent-2.0.22

libevent
的构建完美成功,我想我可以使用以下命令重试构建
tmux

PKG_CONFIG_PATH=$PATH_TO_MY_BUILT_LIBEVENT/lib/pkgconfig ./configure ...

上面的调用成功了,后面的

make
make install
也成功了。

运行我的新构建

tmux
,但是,由于缺少共享对象而中止,这并不奇怪
libevent-2.0.so.5

tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

我认为针对自定义库进行构建意味着它也将在运行时使用?我的

ldd
上的
tmux
给了我:

linux-vdso.so.1 =>  (0x00007fff8f5ff000)
libutil.so.1 => /lib64/libutil.so.1 (0x0000003cf8800000)
libncurses.so.5 => /lib64/libncurses.so.5 (0x0000003cf7e00000)
libevent-2.0.so.5 => not found
librt.so.1 => /lib64/librt.so.1 (0x0000003ce8600000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003cea200000)
libc.so.6 => /lib64/libc.so.6 (0x0000003ce7600000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003cf7200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003ce7e00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ce8200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003ce7200000)

所以,找不到

libevent-2.0.so.5

我是否需要求助于设置,我不知道,

LIBS
LDFLAGS
或其他一些变量或切换到上面的
configure
脚本,这样,我不知道我新建的路径
libevent
嵌入在
tmux
二进制文件中,由
ld
提供?

没有 root 访问权限 - 大学 Linux 工作站 - 坦率地说,我认为我不需要。我也不想乱搞

LD_LIBRARY_PATH
之类的事情。可以说,做
LD_LIBRARY_PATH=$PATH_TO_MY_LIBEVENT/lib tmux
效果很好。但我希望它“默认”工作,找到并使用我的
libevent

我想该解决方案几乎适用于任何使用“GNU 构建系统”的软件。在这里做什么是正确的?

linux makefile gnu ld configure
1个回答
4
投票

您针对一个库进行构建,但系统不知道该库在哪里。由于您不想安装该库,而是将其保留在构建它的位置,因此您可以使用链接器的

-rpath=
选项来解决它 - 它将库的搜索路径嵌入到可执行文件中。

只需重建您的应用程序并将其添加到 LDFLAGS 中,例如

LDFLAGS="-rpath=/home/mypath/to/libevent"
(但请注意,它是一个链接器选项,并且可能在 makefile 中作为链接器使用 gcc 本身 - gcc 不知道该选项,那么你需要这样写
LDFLAGS="-Wl,-rpath=/home/mypath/to/libevent"
来强制gcc将选项传递给实际的链接器)

顺便说一句,实际上,即使不重新编译应用程序,您也可以更改 rpath有一个工具 patchelf 可以完成这项工作。

© www.soinside.com 2019 - 2024. All rights reserved.