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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отключить run-time подключение необязательных библиотек?  (Прочитано 324 раз)
stopa3.10.1996
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Октябрь 23, 2017, 17:09 »

Всем привет!

Программа, написанная с использованием Qt 4.8.6, валится, когда системный линкер находит где-то библиотеку QtXml4.dll от другой версии Qt и пытается её загрузить. Если положить QtXml от этой же сборки Qt в рабочую директорию нашей программы, то всё работает нормально(ибо рабочая директория на Win имеет больший приоритет, чем пути из PATH). Если сделать так, чтобы линкер не находил вообще никакой QtXml4.dll (и не подбрасывать ничего в рабочую директорию), то всё тоже работает. Явно QtXml нигде не линкуется к нашей программе. DependencyWalker говорит, что ни один бинарник из графа статических зависимостей от этой библиотеки тоже не зависит. Создаётся ощущение, что Qt реализует какой-то свой внутренний механизм динамической загрузки опциональных библиотек. Единственный известный мне способ реализовать такую систему - явно использовать что-то типа LoadLibrary в формате “если линкер находит где-то разделяемую библиотеку с нужным именем, то загрузить её, иначе - забить и работать дальше”, но поиск по коду/документации/интернету ничего на эту тему ничего не дал.

Буду очень признателен, если кто-нибудь подскажет, что я делаю не так. Заранее спасибо!
Записан
ssoft
Частый гость
***
Offline Offline

Сообщений: 250


Просмотр профиля
« Ответ #1 : Октябрь 23, 2017, 17:38 »

Скорее всего один из динамически подгружаемых плагинов (форматы графики, драйвер БД и т.п.) задействует xml.
В случае отсутствия dll соответствующий плагин просто не подгружается и все работает.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2003


Просмотр профиля
« Ответ #2 : Октябрь 23, 2017, 18:20 »

Если предыдущее верно, то попробуй устанавливать переменную окружения QT_DEBUG_PLUGINS=1 чтобы  видеть что он грузит
Записан
stopa3.10.1996
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« Ответ #3 : Октябрь 30, 2017, 16:25 »

Я решил проблему.

Действительно, один из плагинов (QtSvg) подключал библиотеку QtXml4. Плагин нужен, поэтому добавил QtXml4 в каталог с программой.
Чтобы больше не возникало подобных проблем, рядом с исполняемым файлом положил файл qt.conf (http://doc.qt.io/qt-4.8/qt-conf.html) и сконфигурировал его так, чтобы Qt не подключал библиотеки из системных путей (и откуда-либо ещё, кроме как из папки с программой).

Спасибо за подсказки.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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