[devel] Коллизия символов разных динамических библиотек

Roman Savochenko rom_as на diyaorg.dp.ua
Вс Сен 12 15:42:39 UTC 2010


11.09.2010 22:02, Roman Savochenko пишет:
> В самой программе OpenSCADA уже нет ни одного простого символа за 
> рамками собственных областей видимости поэтому грешу на используемые 
> сторонние библиотеки, вроде Expat, Gd, OpenSSL. Следовательно вопрос. 
> Можно-ли указать линкеру сообщать о коллизиях символов в динамических 
> библиотек во время выполнения dlopen? Сам покопал тут и с ходу не нашёл.
На вопрос можно не отвечать. Проблема решена.

Однако мантейнерам системо-образующих пакетов решение может быть 
интересным, поскольку вскрывает системную проблему динамического линкера.

В общем для проверки модулей на разделяемую библиотеку, перед 
окончательным её подключением, мною использовалась функция открытия 
модуля dlopen(), а затем, если модуль нормально открылся, её закрытие 
посредством dlclose(), а также последующая регистрация файла модуля как 
корректный. После этого окончательно вызывалась dlopen() для финального 
подключения.

На Branch 5.1 и ещё дальше в историю этот механизм прекрасно работал. В 
Сизифе-же имеем падение. Если убираем стадию проверки с предварительным 
вызовом dlopen() -> dlclose() то всё работает. Похоже имеем дело с 
проблемой линкера при перелинковке библиотек по зависимостям, а именно 
происходит следующее:
  - Подключение библиотек QTCore и QtGui.
  - Отключение библиотек QTCore и QtGui.
  - Подключение библиотек QTCore и QtGui. И на этом этапе происходит 
ошибочная линковка!

Думаю для программ, единоразово подключающих свои модули, это не 
проблема. Однако есть программы, которые могут отбрасывать модули во 
время работы и подключать новые, например для горячего их обновления. 
Так вот для них это может оказаться проблемой, правда только для модулей 
с собственными, достаточно тяжёлыми, зависимостями.

С уважением, Роман
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : rom_as.vcf
Тип     : text/x-vcard
Размер  : 301 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20100912/d04badc7/attachment.vcf>


Подробная информация о списке рассылки Devel