LD_PRELOAD несколько взаимозависимых библиотек

У меня есть библиотеки с деревом зависимостей, то есть некоторые зависимости имеют другие зависимости, которые я хочу предварительно загрузить. Как я могу это сделать?

LD_PRELOAD \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicudata.so.60 \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicuuc.so.60 \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libicui18n.so.60 \
/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5 \
MyApp

LD_PRELOAD Вызов call содержит сортировку, так что зависимости перечислены перед зависимой библиотекой.

Компоновщик выдает следующую ошибку:

ERROR: ld.so: object '/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

Можно ли предварительно загружать библиотеки для выполнения зависимостей в правильном порядке?

1 ответ

Решение

Эта ошибка:

ld.so: object '/opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5' \
from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

означает, что динамический загрузчик попытался открыть библиотеку и потерпел неудачу.

Есть несколько возможных причин этого сбоя:

  1. Файл не существует (используйте ls -L /opt/yocto/2.5.1/sysroots/core2-64-poky-linux/usr/lib/libQt5Core.so.5 чтобы подтвердить, что это делает
  2. Файл для неправильной архитектуры (например, 32-битный ELF, когда MyApp является 64-битным или наоборот). использование file MyApp а также file libQt5Core.so.5 чтобы подтвердить, что они совпадают.
  3. Что-то другое. возможно MyApp был связан с newlib или же uClibc, но libQt5Core.so.5 был построен с GLIBC (или наоборот).
Другие вопросы по тегам