Каждый неопределенный символ связан с именем библиотеки, из которой он взят? - PullRequest
0 голосов
/ 14 декабря 2018

Допустим, что libA.so зависит от libB.so, libC.so, libD.so.Есть ли сопоставление между неопределенными символами и необходимыми именами библиотек:

undefined_symbol_1 comes from libB.so
undefined_symbol_2 comes from libC.so
undefined_symbol_3 comes from libC.so
undefined_symbol_4 comes from libC.so
undefined_symbol_5 comes from libD.so

или они просто хранятся отдельно:

Undefined symbols: undefined_symbol_1, undefined_symbol_2, undefined_symbol_3, undefined_symbol_4, undefined_symbol_5;
Required libraries: "libB.so", "libC.so", "libD.so";

Система: ubuntu

Инструменты:г ++

1 Ответ

0 голосов
/ 14 декабря 2018

Нет такого сопоставления в формате Linux / elf.Неразрешенные символы и необходимые библиотеки не зависят.

Фактически, вы можете предварительно загрузить (используя LD_PRELOAD) другую библиотеку, которая разрешает любой из неразрешенных символов.Этот метод часто используется для замены libc malloc и друзей другой реализацией кучи без перекомпиляции исполняемого файла.

При разрешении символа компоновщик во время выполнения просматривает список загруженных исполняемых файлов и библиотек в том порядке, в котором они былизагружен и выбран первый для разрешения символа.

Рекомендуется прочитать: Как писать совместно используемые библиотеки Ульрихом Дреппером .

...