ОШИБКА: 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 это на моем компьютере, я не могу найти это. Эта ошибка возникает независимо от того, какую команду я выполняю. Но после перезагрузки моего компьютера он исчез.