我使用的是Ubuntu 12.04。 每当我开始我的bashterminal,每当我input一个命令(并按回车),我得到这个消息:
错误:ld.so:LD_PRELOAD中的对象'/usr/lib/liblunar-calendar-preload.so'无法预加载:忽略。
真奇怪。 那么LD_PRELOAD使用的环境variables是什么? 现场发生了什么?
谢谢。
链接器需要一些环境变量来进行计算。 一个是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
变量中的库。
可能是在变量内部列出了一个无法预加载的库。 查看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
这可能会发生在您删除一些软件,重新启动计算机。
今天我安装一些软件,并apt remove xxx
和apt-get auroremove
,我得到这个错误。 当在我的电脑grep它我找不到这个。 无论执行什么命令,都会发生此错误。 但是当我重新启动我的电脑后,它消失了。