在路径中找不到 lib

在路径中找不到 lib

我正在尝试启动一个依赖于我的路径中的某些库的程序,但是该程序表示找不到这些文件:

11:45:27 ~ > echo $PATH
/usr/share/fsl/5.0/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/mri/Scripts:/home/mri/Scripts/MRI:/home/mri/Software/BRAINS3/bin:/home/mri/Software/BRAINS3/lib:/home/mri/Software/ITK_Build/bin:/home/mri/Software/ITK_Build/lib:/home/mri/Software/VTK_Build/bin:/home/mri/Software/VTK_Build/lib:/usr/lib/fsl/5.0

11:45:33 ~ > brains3
/home/mri/Software/BRAINS3/bin/brains3_real: error while loading shared libraries: libiplUtils.so: cannot open shared object file: No such file or directory

11:45:35 ~ > sudo find / -name libiplUtils.so
[sudo] password for mri: 
/home/mri/Software/BRAINS3/lib/libiplUtils.so

有人知道如何解决这个问题吗?

答案1

您可以使用环境变量指定库搜索路径LD_LIBRARY_PATH

$ export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
$ brains3

您不应该为整个系统设置此变量。如果您不能/不想在系统范围内安装软件,您可以创建一个包装脚本。

答案2

动态链接器在 LD_LIBRARY_PATH 中搜索库。

答案3

Unix 系统倾向于将不同类型的文件分类到不同的目录中。可执行文件(例如/usr/bin)、文档(例如/usr/man/usr/info、...)、本机库(例如/usr/lib)、Perl 库(例如/usr/lib/perl5)等都有单独的目录。相应地,有不同的路径变量,都具有相同的语法(以冒号分隔的目录列表):PATH用于可执行文件、MANPATH用于手册页、LD_LIBRARY_PATH用于本机库1、PERL5LIB用于 Perl 库等。

对于本机库,无论环境变量中是否提及,搜索路径中都有系统默认库LD_LIBRARY_PATH。在 Linux 上,这些目录列在/etc/ld.so.conf(并且/lib始终/usr/lib在搜索路径中)。

因此,您有几种可能性:

  • 添加/home/mri/Software/BRAINS3/lib/etc/ld.so.conf(Linux 特定的,其他 UNIX 变体可能有类似的文件)。运行ldconfig以使更改生效。
  • 添加(适用于所有用户)或添加export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib(仅适用于您)。/etc/profile~/.profile
  • 制作一个包装脚本:

    #!/bin/sh
    export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
    exec /home/mri/Software/BRAINS3/bin/brains3 "$@"
    
  • /home/mri/Software/BRAINS3/lib创建指向搜索路径上另一个目录中的库的符号链接:

    ln -s /home/mri/Software/BRAINS3/bin/brains3/lib*.so.* /usr/local/lib/
    

¹是大多数 Unix 变体上的名称,但 Mac OS X 使用的是 LD_LIBRARY_PATHDYLD_LIBRARY_PATH

相关内容