请问有人能用初学者语言解释LD_LIBRARY_PATH是什么(unix)?

时间:2012-07-15 14:28:14

标签: linux ubuntu

我刚刚在Ubuntu上安装了SPIKEfile(fuzzer),它说如下:

现在需要设置LD_LIBRARY_PATH以包含libdisasm.so的路径和libdlrpc.so的路径

'printenv'显示没有这样的变量。

有人可以用初学者的语言向我解释这实际意味着什么,以及如何解决问题。我是一个非常缺乏经验的Linux用户。提前谢谢。

P.S。我发现网上的大部分内容都没有用,我不想在不知道自己在做什么的情况下复制+粘贴。

2 个答案:

答案 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