Анализ этого вопроса Я узнал некоторые вещи о поведении разрешения слабых символов в контексте динамической загрузки (dlopen
) в Linux. Теперь я ищу спецификации, регулирующие это.
Возьмем пример. Предположим, что существует программа a
, которая динамически загружает библиотеки b.so
и c.so
в этом порядке. Если c.so
зависит от двух других библиотек foo.so
(фактически libgcc.so
в этом примере) и bar.so
(фактически libpthread.so
), тогда обычно символы, экспортируемые с помощью bar.so
, могут использоваться для удовлетворения слабых связей символов в foo.so
. Но если b.so
также зависит от foo.so
, но не от bar.so
, то эти слабые символы, по-видимому, не будут связаны с bar.so
. Похоже, что foo.so
не только для печати, а только для символов a
и b.so
, и всех их зависимостей.
Это имеет смысл, в некоторой степени, поскольку в противном случае загрузка c.so
может изменить поведение foo.so
в какой-то момент, когда b.so
уже использует библиотеку. С другой стороны, в вопросе, который меня вызвал, это вызвало немало неприятностей, поэтому я задаюсь вопросом, есть ли способ решить эту проблему. И чтобы найти пути, мне сначала нужно хорошее понимание очень точных подробностей о том, как указано разрешение символов в этих случаях.
Какова спецификация или другой технический документ для определения правильного поведения в этих сценариях?