[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