~/.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
,或以其他方式安排设置环境变量PATH
和LD_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
因此,如果可用,请尝试安装。这可能会满足你缺失的依赖。
一般来说,在本地编译和安装软件之前,首先检查发行版中现有的二进制包。