我刚刚在 Ubuntu 上安装了 SPIKEfile(fuzzer),它显示以下内容:
现在您需要设置 LD_LIBRARY_PATH 以包含 libdisasm.so 的路径和 libdlrpc.so 的路径
'printenv' 表明不存在这样的变量。
有人可以用初学者的方式向我解释这实际上意味着什么以及如何解决问题。我是一个非常缺乏经验的 Linux 用户。提前致谢。
PS我发现网上的大多数东西都没有帮助,我宁愿在不知道自己在做什么的情况下复制+粘贴。
Linux 有共享库的概念,即不被烘焙到可执行文件中的代码库,而是在程序执行时动态链接。可执行文件仅包含对所需库名称的引用。
LD_LIBRARY_PATH
是一个环境变量,列出了 Linux 加载时链接器在定位这些库时应该使用的额外路径。它只是一个以冒号分隔的表单列表
/path/to/somewhere:/path/to/somewhere_else:/path/to/narnia
假设您使用的是 Bash,您可以执行以下操作以将额外路径添加到列表中(即使$LD_LIBRARY_PATH
最初为空或未设置也可以使用):
export LD_LIBRARY_PATH=/path/to/dir/containing/libdisasm.so:$LD_LIBRARY_PATH
(对于 libdlrpc.so 也是如此)。
我在 Solaris 下使用了 LD_LIBRARY_PATH,因为有时在启动脚本时似乎缺少一些库。在脚本开头设置此变量只是一种更安全的解决方法。
值得一提的东西(可能是您正在寻找的东西):
ldd /path/to/narnia
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/dir/containing/lib
(这样做不会丢失以前设置的目录)
再次使用命令时是否应该工作:
ldd /path/to/narnia
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => ~/myprogdir/lib/libmylib.so.1 (0x00002b4eca9fa000)
如果仍然找不到库,这将引发错误,请确保在您的用户配置文件中添加设置:
# vi .bash_profile