繁体   English   中英

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

[英]ERROR: ld.so: object LD_PRELOAD cannot be preloaded: ignored

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

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

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

谢谢。

链接器考虑了一些环境变量。 一个是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变量中列出的库。

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

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

感谢您的回复。 我想我已经解决了刚才的问题。

由于 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,错误消失了。

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

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

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

我通过以下方式修复它:

echo "" > /etc/ld.so.preload

对我有用的解决方案是使用 sudo vim 并进入/etc/ld.so.preload

然后我只是删除了行

/usr/local/lib/AppProtection/libAppProtection.so

然后我只是保存了文件,一切都没有问题。

我在 Raspberry Pi 上安装 Citrix 客户端时遇到这种类型的错误。 总之有一个文件/etc/ld.so.preload。 我的系统抱怨的库列在该文件中。 我用 # 注释掉它,系统停止抱怨。

当我执行以下命令时,一切都变得更好了。

unset LD_PRELOAD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM