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

新手上路,请多包涵

我正在使用 ubuntu 12.04。每次我启动我的 bash 终端并且每次我完成输入命令(并按 enter)时,我都会收到以下消息:

错误:ld.so:无法预加载来自 LD_PRELOAD 的对象“/usr/lib/liblunar-calendar-preload.so”:忽略。

真奇怪。那么环境变量 LD_PRELOAD 是干什么用的呢?幕后发生了什么?

谢谢。

原文由 lulyon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

链接器会考虑一些环境变量。一个是 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.bash_profile 环境,其中设置了 LD_PRELOAD 并从变量中删除该库。

原文由 hetepeperfan 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您想确保 当且仅当 程序 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 很有用。

原文由 Einar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏