ОШИБКА: ld.so: объект LD_PRELOAD не может быть предварительно загружен: игнорируется
Я использую ubuntu 12.04. Каждый раз, когда я запускаю свой терминал bash и каждый раз, когда я заканчиваю набирать команду (и нажимаю клавишу ввода), я получаю это сообщение:
ОШИБКА: ld.so: объект '/usr/lib/liblunar-calendar-preload.so' из LD_PRELOAD не может быть предварительно загружен: игнорируется.
Это странно.
Итак, для чего используется переменная среды LD_PRELOAD? И что происходит за сценой?
Спасибо.
Ответы
Ответ 1
Компонент принимает некоторые переменные окружения для учета. один - 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
и удалите эту библиотеку из этой переменной.
Ответ 2
Если вы хотите убедиться, что библиотека загружена , если и только если запущена программа lunar-calendar-gtk
, вы можете применить это:
Вы устанавливаете переменную окружения для каждой команды, предварительно назначая ей команду:
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
Затем вы можете поместить это в оболочку script и сделать lunar-calendar-gtk
символическую ссылку на эту оболочку script, заменив исходную ссылку. Это эффективно гарантирует, что библиотека загружается каждый раз, когда выполняется оригинальное приложение.
Вам придется переименовать исходный lunar-calendar-gtk
в другое, что может быть не слишком интригующим, поскольку это может вызвать проблемы при удалении и обновлении. Тем не менее, я нашел его полезным с прежней версией Skype.
Ответ 3
Спасибо за ответы. Я думаю, что сейчас я решил проблему.
Поскольку LD_PRELOAD предназначен для установки некоторой загруженной библиотеки, я проверяю библиотеку, которая предварительно загружает 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, ошибка исчезла.
Ответ 4
Это означает, что введенный вами путь вызвал ошибку. В своей команде LD_PRELOAD
измените путь, как советы по ошибкам:
/usr/lib/liblunar-calendar-preload.so
Ответ 5
Это может произойти при удалении некоторого программного обеспечения, перезагрузке компьютера.
Сегодня я устанавливаю некоторое программное обеспечение и делаю apt remove xxx
и apt-get auroremove
, я получаю эту ошибку. Когда grep это на моем компьютере, я не могу найти это. Эта ошибка возникает независимо от того, какую команду я выполняю. Но после перезагрузки моего компьютера он исчез.