错误:ld.so:对象LD_PRELOAD无法预加载:忽略

时间:2013-07-18 12:37:35

标签: linux bash

我正在使用ubuntu 12.04。每次我启动我的bash终端,每次输入命令(并按回车键),我都会收到此消息:

  

错误:ld.so:object'/usr/lib/liblunar-calendar-preload.so'来自   LD_PRELOAD无法预加载:忽略。

很奇怪。 那么LD_PRELOAD用于什么环境变量?现场背后发生了什么?

感谢。

5 个答案:

答案 0 :(得分:10)

链接器将一些环境变量输入到acount中。一个是LD_PRELOAD

来自man 8 ld-linux

LD_PRELOAD
          A whitespace-separated list of additional,  user-specified,  ELF
          shared  libraries  to  be loaded before all others.  This can be
          used  to  selectively  override  functions   in   other   shared
          libraries.   For  setuid/setgid  ELF binaries, only libraries in
          the standard search directories that are  also  setgid  will  be
          loaded.

因此,链接器将尝试在加载其他库之前加载LD_PRELOAD变量中列出的库。

可能的情况是,变量内部列出了无法预加载的库。查看设置了.bashrc的{​​{1}}或.bash_profile环境,并从变量中删除该库。

答案 1 :(得分:7)

如果您要确保已加载库 当且仅当 启动了程序lunar-calendar-gtk时,您可以应用此选项:

通过在命令前加上命令为每个命令设置环境变量:

$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$

然后,您可以选择将其放在shell脚本中,并使lunar-calendar-gtk成为此shell脚本的符号链接,替换原始引用。这有效地确保了每次执行原始应用程序时都加载库。

您必须将原始lunar-calendar-gtk重命名为其他内容,这可能不会太有趣,因为它可能会导致卸载和升级问题。但是,我发现它对以前版本的Skype很有用。

答案 2 :(得分:2)

感谢您的回复。我想我刚刚解决了这个问题。

由于LD_PRELOAD用于设置一些扩展的库,我检查ld预加载LD_PRELOAD的库,其中一个是“liblunar-calendar-preload.so”,它不存在于路径“/ usr / lib / liblunar中-calendar-preload.so“,但我找到了一个类似的库”liblunar-calendar-preload-2.0.so“,这是前一个版本的差异版本。

然后我想在系统更新时liblunar-calendar-preload.so可能会更新为2.0版本,而LD_PRELOAD仍然是“/usr/lib/liblunar-calendar-preload.so”。因此预加载库名称未更新到最新版本。

为避免更改环境变量,我在路径“/ usr / lib”

下创建了一个符号链接
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so

然后我重启bash,错误消失了。

答案 3 :(得分:2)

这意味着您输入的路径导致错误。在LD_PRELOAD命令中,修改路径,如错误提示:

/usr/lib/liblunar-calendar-preload.so

答案 4 :(得分:0)

您可以检查 /etc/ld.so.preload 文件内容

我修复了

回显“”> /etc/ld.so.preload