linux-如何针对我也要构建的自定义库构建“ ./configure \u0026\u0026 make \u0026\u0026 make install”软件?

我正在相当普通的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或其他一些变量或开关来配置上面的脚本,所以我不知道将我新建的libevent的路径嵌入到tmux二进制文件中,由ld礼貌?

我没有root访问权限-大学Linux工作站-坦率地说,我认为不需要.我也不想与LD_LIBRARY_PATH之类的东西混为一谈.可以这么说,执行LD_LIBRARY_PATH = $PATH_TO_MY_LIBEVENT / lib tmux可以正常工作.但我希望它“默认”运行,找到并使用我的libevent.

我猜想该解决方案将几乎适用于所有使用“ GNU构建系统”的软件.在这里做什么正确的事?

解决方法:

您是针对库构建的,但是系统不知道库在哪里.由于您不想安装该库,而是将其保留在生成库的位置,因此可以使用链接器的-rpath =选项-it embeds a search path来解决它,以便将库导入可执行文件.

只需将其添加到LDFLAGS中即可重建应用程序,例如LDFLAGS =“-rpath = / home / mypath / to / libevent”(但请注意,这是一个链接器选项,并且有可能在makefile中用作链接器) gcc本身-gcc不知道该选项,那么您需要像LDFLAGS =“-Wl,-rpath = / home / mypath / to / libevent”那样编写它,以强制gcc将选项向下传递给实际的链接器)

顺便说一句,实际上,您甚至可以在不重新编译应用程序的情况下更改rpath-该工作的there’s a tool patchelf.

上一篇:error: possibly undefined macro: AC_PROG_GNU_M4


下一篇:配置:错误:Python解释器太旧