【发布时间】:2015-09-06 16:36:59
【问题描述】:
我正在一个非常普通的 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
我认为针对自定义库构建意味着它也将在运行时使用?我的tmux 上的ldd 给了我:
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 构建系统”的软件。在这里做什么是正确的?
【问题讨论】:
-
我不知道“tmux”或您的 Linux 环境的细节。但总的来说,你会 1)
make clean: 删除你当前的二进制文件; 2)./configure:让 GNU 构建为您的环境重新配置构建设置。据推测,这应该检测到libevent-2.0.22。最后,3)make && make install:从头开始重建。 -
嗨 paulsm4,您为什么确信
./configure(我假设没有开关?)应该检测到libevent-2.0.22?我不希望它 - 我可以在任何地方构建库,它不像脚本从/或任何东西开始对其进行递归查找。但它应该确实使用它如果我告诉它使用位于PKG_CONFIG_PATH变量指示的路径的pkg-config文件,这就是我所做的。一切都很好,只是构建的二进制文件无法找到它应该是./configured 的库!
标签: linux makefile gnu ld configure