Russian Qt Forum
Ноябрь 23, 2024, 17:55
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Совместимлсть Qt dll
Страниц: [
1
]
2
3
...
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Совместимлсть Qt dll (Прочитано 28717 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Совместимлсть Qt dll
«
:
Июнь 24, 2014, 15:41 »
Добрый день
Простой ответ неоднократно звучал, типа "плагин откомпиленный с Qt 4 не будет работать с Qt 5". Хорошо, верю, но многое остается неясным. Значит, пятерка с пятеркой - все норм, говорилось что "они имеют одинаковое ABI". А как в этом убедиться? Где/как посмотреть это самое ABI? В гугле ничего такого не наблюдаю.
И более важно: как быть если у меня кастомная сборка? Давеча обнаружил что либа OpenGL меня не устраивает (в том виде как скачал). Ладно, пересобрал как мне надо. Но теперь мне надо как-то обеспечить чтобы грузилась именно моя Qt5OpenGL.dll. Конечно я положу ее рядом с exe, но это ничего не гарантирует - если "подходящая" dll уже в памяти - ее и подсунут, на диске ничего искать не будут.
Просветите
Спасибо
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Совместимлсть Qt dll
«
Ответ #1 :
Июнь 24, 2014, 15:53 »
Цитата: Igors от Июнь 24, 2014, 15:41
А как в этом убедиться?
Это их заявленная возможность - совместимость снизу вверх.
Цитата: Igors от Июнь 24, 2014, 15:41
Конечно я положу ее рядом с exe, но это ничего не гарантирует - если "подходящая" dll уже в памяти - ее и подсунут, на диске ничего искать не будут.
Твоя dll и та что в памяти - разные dll, следовательно ничего не подсунут (и кстати в какой ОС такой алгоритм?).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Совместимлсть Qt dll
«
Ответ #2 :
Июнь 24, 2014, 18:12 »
Цитата: Alex Custov от Июнь 24, 2014, 15:53
Это их заявленная возможность - совместимость снизу вверх.
Верю, но как пощупать?
Цитата: Igors от Июнь 24, 2014, 15:41
Твоя dll и та что в памяти - разные dll, следовательно ничего не подсунут (и кстати в какой ОС такой алгоритм?).
Да хотя бы в Вашей, напр MSDN пишет
Цитировать
If a DLL with the same module name is already loaded in memory, the system checks only for redirection and a manifest before resolving to the loaded DLL, no matter which directory it is in. The system does not search for the DLL.
Записан
mitrich
Гость
Re: Совместимлсть Qt dll
«
Ответ #3 :
Июнь 25, 2014, 00:19 »
Цитата: Igors от Июнь 24, 2014, 15:41
это ничего не гарантирует - если "подходящая" dll уже в памяти - ее и подсунут, на диске ничего искать не будут.
Гарантирует. Не подсунут.
Цитировать
If a DLL with the same module name is already loaded in memory, the system uses the loaded DLL, no matter which directory it is in. The system does not search for the DLL.
Это если она уже загружена
в адресное пространство твоего процесса
, т.е., твоим приложением (
ну, или вирусом каким-нибудь, который свой код таким образом подгружает
). То, что загружают другие приложения, твоего совершенно не касается.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Совместимлсть Qt dll
«
Ответ #4 :
Июнь 25, 2014, 09:30 »
Цитата: mitrich от Июнь 25, 2014, 00:19
Это если она уже загружена
в адресное пространство твоего процесса
, т.е., твоим приложением (
ну, или вирусом каким-нибудь, который свой код таким образом подгружает
). То, что загружают другие приложения, твоего совершенно не касается.
Допустим есть 2 (или более) Qt приложения и каждый положил Qt5Core.dll рядом с exe. По-Вашему выходит а памяти будут 2 копии этой dll - ну если "не касается". В это слабо верится, что за dll если каждый процесс ее опять загружает? Естественно предположить что в памяти будет одна, отмапленная в адресное пр-во каждого процесса.
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Совместимлсть Qt dll
«
Ответ #5 :
Июнь 25, 2014, 09:43 »
Цитата: Igors от Июнь 25, 2014, 09:30
Допустим есть 2 (или более) Qt приложения и каждый положил Qt5Core.dll рядом с exe. По-Вашему выходит а памяти будут 2 копии этой dll - ну если "не касается". В это слабо верится, что за dll если каждый процесс ее опять загружает? Естественно предположить что в памяти будет одна, отмапленная в адресное пр-во каждого процесса.
Если разные файлы, то и либа грузится дважды (в линукс скорее всего по inode идет сверка).
Записан
Гугль в помощь
xokc
Птица говорун
Offline
Сообщений: 976
Re: Совместимлсть Qt dll
«
Ответ #6 :
Июнь 25, 2014, 11:41 »
Цитата: Igors от Июнь 25, 2014, 09:30
По-Вашему выходит а памяти будут 2 копии этой dll - ну если "не касается".
Так а Вы сами и проверьте - несложно ведь! Заодно и нам тут расскажите как всё обстоит на
самом деле
.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Совместимлсть Qt dll
«
Ответ #7 :
Июнь 25, 2014, 11:57 »
Цитата: navrocky от Июнь 25, 2014, 09:43
Если разные файлы, то и либа грузится дважды (в линукс скорее всего по inode идет сверка).
"разные файлы" - чего это ОС сразу станет искать по всем путям? И что считать "разными"? Как ни крути, а сначала должна быть проверка "устраивает ли та что уже в памяти"
Цитата: xokc от Июнь 25, 2014, 11:41
Так а Вы сами и проверьте - несложно ведь! Заодно и нам тут расскажите как всё обстоит на
самом деле
.
Это универсальный ответ на любой вопрос
А хотелось сначала ознакомиться с теорией - и услышать советы знатоков
Записан
alex312
Хакер
Offline
Сообщений: 606
Re: Совместимлсть Qt dll
«
Ответ #8 :
Июнь 25, 2014, 12:10 »
Цитата: Igors от Июнь 25, 2014, 11:57
Это универсальный ответ на любой вопрос
А хотелось сначала ознакомиться с теорией - и услышать советы знатоков
http://msdn.microsoft.com/en-us/library/7d83bc18.aspx
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Совместимлсть Qt dll
«
Ответ #9 :
Июнь 25, 2014, 16:41 »
Цитата: alex312 от Июнь 25, 2014, 12:10
http://msdn.microsoft.com/en-us/library/7d83bc18.aspx
Ну Вы же прекрасно поняли что речь не о том в каком порядке пути перебираются - так к чему этот "тыц"
Записан
OKTA
Гость
Re: Совместимлсть Qt dll
«
Ответ #10 :
Июнь 25, 2014, 20:51 »
Если бы была одна dll на всех, то система была бы подвержена постоянной угрозе) Сделай библиотеке какой-нибудь code injection и всё, все приложения танцуют под твою дудку
Хотя так было в Windows 3.1, если я не ошибаюсь!))
А теперь приходится писать драйвер уровня ядра, чтобы отслеживать загрузку библиотеки в память и налету каждую обрабатывать
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Совместимлсть Qt dll
«
Ответ #11 :
Июнь 25, 2014, 21:58 »
Цитата: Igors от Июнь 24, 2014, 18:12
Верю, но как пощупать?
Что значит пощупать? Убедиться что так и есть? Ну, скомпилировать какой-нибудь плагин с 5.0, и протестировать его на всех версиях с 5.0 до 5.3.1.
Цитата: Igors от Июнь 24, 2014, 15:41
Да хотя бы в Вашей, напр MSDN пишет
Это касается только одного процесса, уже в принципе сказали.
Записан
alex312
Хакер
Offline
Сообщений: 606
Re: Совместимлсть Qt dll
«
Ответ #12 :
Июнь 26, 2014, 01:30 »
Цитата: Igors от Июнь 25, 2014, 16:41
Ну Вы же прекрасно поняли что речь не о том в каком порядке пути перебираются - так к чему этот "тыц"
после таких вот ваших заявлений
Цитата: Igors от Июнь 25, 2014, 11:57
Как ни крути, а сначала должна быть проверка "устраивает ли та что уже в памяти"
решил привести ссылку.
А по теме :
https://blog.qt.digia.com/blog/2009/08/12/some-thoughts-on-binary-compatibility/
http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++
http://techbase.kde.org/Policies/Binary_Compatibility_Examples
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Совместимлсть Qt dll
«
Ответ #13 :
Июнь 26, 2014, 15:50 »
Цитата: Alex Custov от Июнь 25, 2014, 21:58
Это касается только одного процесса, уже в принципе сказали.
Цитата: alex312 от Июнь 26, 2014, 01:30
после таких вот ваших заявлений
Цитата: Igors от Июнь 25, 2014, 11:57
Как ни крути, а сначала должна быть проверка "устраивает ли та что уже в памяти"
решил привести ссылку.
Не надо "поджимать губки", намекая типа "ах как вы безграмотны, делаете такие заявления!"
Хорошо, давайте так: на 1 машине 10 Qt приложений, каждое имеет Qt5Core.dll рядом с exe. Если все 10 приложений запущены - сколько копий Qt5Core.dll будет загружено в память? Все 10? Я не знаю "правельный ответ", но очень сомневаюсь что все 10 т.к.
- это выглядит глупо и противоречит идее dll
- выходит "всегда юзается та dll что рядом c exe - что-то слишком просто. Напр зачем тогда эта городушка
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682600%28v=vs.85%29.aspx
Записан
Bepec
Гость
Re: Совместимлсть Qt dll
«
Ответ #14 :
Июнь 26, 2014, 15:55 »
Думаю будет загружено 10 штук.
Почему это глупо, подскажите пожалуйста?
Это было бы глупо, если бы в приложении 10 раз подгружалась 1 dll
А механизм поиска dll известен - рядом с файлом(для ярлыков в рабочем каталоге), потом по path и системным каталогам.
Записан
Страниц: [
1
]
2
3
...
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...