我刚刚在Ubuntu上安装了SPIKEfile(fuzzer),它说:
现在您需要设置您的LD_LIBRARY_PATH以包含libdisasm.so的path和libdlrpc.so的path
“printenv”显示没有这样的variables存在。
有人能请初学者向我解释这实际上是什么意思,以及如何解决这个问题。 我是一个相当缺乏经验的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)
如果仍然无法找到lib,请确保在用户配置文件中添加设置:
# vi .bash_profile