我正在使用ubuntu 12.04。每次我启动我的bash终端,每次输入命令(并按回车键),我都会收到此消息:
错误:ld.so:object'/usr/lib/liblunar-calendar-preload.so'来自 LD_PRELOAD无法预加载:忽略。
很奇怪。 那么LD_PRELOAD用于什么环境变量?现场背后发生了什么?
感谢。
答案 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