我刚刚在Ubuntu上安装了SPIKEfile(fuzzer),它说如下:
现在需要设置LD_LIBRARY_PATH以包含libdisasm.so的路径和libdlrpc.so的路径
'printenv'显示没有这样的变量。
有人可以用初学者的语言向我解释这实际意味着什么,以及如何解决问题。我是一个非常缺乏经验的Linux用户。提前谢谢。
P.S。我发现网上的大部分内容都没有用,我不想在不知道自己在做什么的情况下复制+粘贴。
答案 0 :(得分:4)
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)。
答案 1 :(得分:1)
我在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