Анализ этого вопроса Я узнал некоторые вещи о поведении разрешения слабых символов в контексте динамической загрузки (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 уже использует библиотеку. С другой стороны, в вопросе, который меня вызвал, это вызвало немало неприятностей, поэтому я задаюсь вопросом, есть ли способ решить эту проблему. И чтобы найти пути, мне сначала нужно хорошее понимание очень точных подробностей о том, как указано разрешение символов в этих случаях.
Какова спецификация или другой технический документ для определения правильного поведения в этих сценариях?