LD_PRELOAD несколько взаимозависимых библиотек - PullRequest
0 голосов
/ 15 ноября 2018

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

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 содержит сортировку, так что зависимости перечислены перед зависимой библиотекой.

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

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 Ответ

0 голосов
/ 16 ноября 2018

Эта ошибка:

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 (или наоборот).наоборот).
...