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. И на этом этапе происходит ошибочная линковка! Думаю для программ, единоразово подключающих свои модули, это не проблема. Однако есть программы, которые могут отбрасывать модули во время работы и подключать новые, например для горячего их обновления. Так вот для них это может оказаться проблемой, правда только для модулей с собственными, достаточно тяжёлыми, зависимостями. С уважением, Роман