Russian Qt Forum
Ноябрь 01, 2024, 04:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 5   Вниз
  Печать  
Автор Тема: Совместимлсть Qt dll  (Прочитано 28524 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июнь 24, 2014, 15:41 »

Добрый день

Простой ответ неоднократно звучал, типа "плагин откомпиленный с Qt 4 не будет работать с Qt 5". Хорошо, верю, но многое остается неясным. Значит, пятерка с пятеркой - все норм, говорилось что "они имеют одинаковое ABI". А как в этом убедиться? Где/как посмотреть это самое ABI? В гугле ничего такого не наблюдаю.

И более важно: как быть если у меня кастомная сборка? Давеча обнаружил что либа OpenGL меня не устраивает (в том виде как скачал). Ладно, пересобрал как мне надо. Но теперь мне надо как-то обеспечить чтобы грузилась именно моя Qt5OpenGL.dll. Конечно я положу ее рядом с exe, но это ничего не гарантирует - если "подходящая" dll уже в памяти - ее и подсунут, на диске ничего искать не будут.

Просветите
Спасибо

Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Июнь 24, 2014, 15:53 »

А как в этом убедиться?

Это их заявленная возможность - совместимость снизу вверх.

Конечно я положу ее рядом с exe, но это ничего не гарантирует - если "подходящая" dll уже в памяти - ее и подсунут, на диске ничего искать не будут.

Твоя dll и та что в памяти - разные dll, следовательно ничего не подсунут (и кстати в какой ОС такой алгоритм?).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июнь 24, 2014, 18:12 »

Это их заявленная возможность - совместимость снизу вверх.
Верю, но как пощупать?

Твоя 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
Гость
« Ответ #3 : Июнь 25, 2014, 00:19 »

это ничего не гарантирует - если "подходящая" 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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июнь 25, 2014, 09:30 »

Это если она уже загружена в адресное пространство твоего процесса, т.е., твоим приложением (ну, или вирусом каким-нибудь, который свой код таким образом подгружает Улыбающийся ). То, что загружают другие приложения, твоего совершенно не касается.
Допустим есть 2 (или более) Qt приложения и каждый положил Qt5Core.dll рядом с exe. По-Вашему выходит а памяти будут 2 копии этой dll - ну если "не касается". В это слабо верится, что за dll если каждый процесс ее опять загружает? Естественно предположить что в памяти будет одна, отмапленная в адресное пр-во каждого процесса.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Июнь 25, 2014, 09:43 »

Допустим есть 2 (или более) Qt приложения и каждый положил Qt5Core.dll рядом с exe. По-Вашему выходит а памяти будут 2 копии этой dll - ну если "не касается". В это слабо верится, что за dll если каждый процесс ее опять загружает? Естественно предположить что в памяти будет одна, отмапленная в адресное пр-во каждого процесса.

Если разные файлы, то и либа грузится дважды (в линукс скорее всего  по inode идет сверка).
Записан

Гугль в помощь
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #6 : Июнь 25, 2014, 11:41 »

По-Вашему выходит а памяти будут 2 копии этой dll - ну если "не касается".
Так а Вы сами и проверьте - несложно ведь! Заодно и нам тут расскажите как всё обстоит на самом деле.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июнь 25, 2014, 11:57 »

Если разные файлы, то и либа грузится дважды (в линукс скорее всего  по inode идет сверка).
"разные файлы" - чего это ОС сразу станет искать по всем путям? И что считать "разными"? Как ни крути, а сначала должна быть проверка "устраивает ли та что уже в памяти"

Так а Вы сами и проверьте - несложно ведь! Заодно и нам тут расскажите как всё обстоит на самом деле.
Это универсальный ответ на любой вопрос Улыбающийся А хотелось сначала ознакомиться с теорией - и услышать советы знатоков  Улыбающийся
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #8 : Июнь 25, 2014, 12:10 »

Это универсальный ответ на любой вопрос Улыбающийся А хотелось сначала ознакомиться с теорией - и услышать советы знатоков  Улыбающийся
http://msdn.microsoft.com/en-us/library/7d83bc18.aspx
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июнь 25, 2014, 16:41 »

Ну Вы же прекрасно поняли что речь не о том в каком порядке пути перебираются - так к чему этот "тыц"  Улыбающийся
Записан
OKTA
Гость
« Ответ #10 : Июнь 25, 2014, 20:51 »

Если бы была одна dll на всех, то система была бы подвержена постоянной угрозе) Сделай библиотеке какой-нибудь code injection и всё, все приложения танцуют под твою дудку  Смеющийся Хотя так было в Windows 3.1, если я не ошибаюсь!))
А теперь приходится писать драйвер уровня ядра, чтобы отслеживать загрузку библиотеки в память и налету каждую обрабатывать  Плачущий
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #11 : Июнь 25, 2014, 21:58 »

Верю, но как пощупать?

Что значит пощупать? Убедиться что так и есть? Ну, скомпилировать какой-нибудь плагин с 5.0, и протестировать его на всех версиях с 5.0 до 5.3.1.

Да хотя бы в Вашей, напр MSDN пишет

Это касается только одного процесса, уже в принципе сказали.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #12 : Июнь 26, 2014, 01:30 »

Ну Вы же прекрасно поняли что речь не о том в каком порядке пути перебираются - так к чему этот "тыц"  Улыбающийся
после таких вот ваших заявлений
Как ни крути, а сначала должна быть проверка "устраивает ли та что уже в памяти"
решил привести ссылку.
А по теме :
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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Июнь 26, 2014, 15:50 »

Это касается только одного процесса, уже в принципе сказали.
после таких вот ваших заявлений
Как ни крути, а сначала должна быть проверка "устраивает ли та что уже в памяти"
решил привести ссылку.
Не надо "поджимать губки", намекая типа "ах как вы безграмотны, делаете такие заявления!"  Улыбающийся
Хорошо, давайте так: на 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
Гость
« Ответ #14 : Июнь 26, 2014, 15:55 »

Думаю будет загружено 10 штук.
Почему это глупо, подскажите пожалуйста?
Это было бы глупо, если бы в приложении 10 раз подгружалась 1 dll Улыбающийся

А механизм поиска dll известен - рядом с файлом(для ярлыков в рабочем каталоге), потом по path и системным каталогам.
Записан
Страниц: [1] 2 3 ... 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.118 секунд. Запросов: 23.