rtmpdump 无需root即可编译,librtmp.so.1 => 未找到

rtmpdump 无需root即可编译,librtmp.so.1 => 未找到

~/.local因此,我通过编辑 makefile 中的前缀选项成功编译了它,使prefix=~/.local程序编译良好,并且我对librtmp.在二进制文件上运行时,ldd我得到以下输出:

ldd rtmpdump-ksv/rtmpdump
linux-vdso.so.1 =>  (0x00007ffedb4d2000)
librtmp.so.1 => not found
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fc7489a5000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fc7485ac000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc748395000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc748113000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc747d87000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc747b83000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc748c15000)

我尝试将ibrtmp.so.1和复制librtmp.so到中的每个目录~/.local

答案1

默认情况下,程序不会在与可执行文件相同的目录中搜索库。 Unix 下的传统目录组织在名为 的目录中包含可执行文件…/bin,在名为 的目录中包含库…/lib

如果您prefix=~/.local在编译软件时进行设置,您最终将安装可执行文件~/.local/bin和库~/.local/lib。要告诉系统有关这些库的信息,请将以下行添加到您的~/.profile,或以其他方式安排设置环境变量PATHLD_LIBRARY_PATH

PATH=$PATH:~/.local/bin
export LD_LIBRARY_PATH=~/.local/lib

在 OSX 上,使用DYLD_LIBRARY_PATH代替LD_LIBRARY_PATH.

答案2

你的分布是什么?您的发行版是否rtmpdump提供二进制包?例如,Debian 就是这样做的,因此 Ubuntu 和 Mint 也应该如此。如果是这样,你为什么不使用它?任何状况之下,

apt-file search librtmp.so

librtmp-dev: /usr/lib/x86_64-linux-gnu/librtmp.so
librtmp0: /usr/lib/x86_64-linux-gnu/librtmp.so.0
librtmp1: /usr/lib/x86_64-linux-gnu/librtmp.so.1

librtmp-dev因此,如果可用,请尝试安装。这可能会满足你缺失的依赖。

一般来说,在本地编译和安装软件之前,首先检查发行版中现有的二进制包。

相关内容