请有人可以在初学者的语言解释什么是LD_LIBRARY_PATH(UNIX)?

我刚刚在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