| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT4] Драйвер ibase зависит от пути компиляции |
| Автор: JekaZZ 22.12.2007, 21:10 |
| Хелп! поставил qt4.2.2 и работаю с ней в VC2005. все бы нормально, пока пытаешься запустить приложение без QT - переименовываю папку QT и приолжение не видит qsqlibased.dll, даже если он лежит рядом с exe. предполагаю, что такое будет на машине с неустановленной QT. Сносил QT, удалял из переменных QTDIR, удалял ветки реестра Trolltech и те, в которых встречается путь к папке qt, устанавливал qt в другую папку. Приложение все равно ищет dll в папке %QTDIR%\plugins\sqldrivers\., где %QTDIR% - папка, в которую qt была установлена сначала. Копилил драйвер так: > qmake > nmake Единственное, где нашел ссылки на этот путь - файл QtCored4.dll, который использует приложение. Что еще примечательно, компилировался дравер на другой машине, где qt была установлена по другому пути. Но здесь же работает в первом варианте %QTDIR%. Может путь, по которому ищется dll, берется из какого-либо кеша или из QtCored4.dll? Что делать? можно ли скопмилировать драйвер в статическую библиотеку? |
| Автор: JekaZZ 22.12.2007, 22:02 |
| Времени нет, поэтому сделал через ....то, через что обычно Нашел в файле QtCored4.dll все ссылки на папку qt в и заменил их на .\ Драйвер положил, соответственно, в папку .\plugins\sqldrivers\ |
| Автор: archimed7592 23.12.2007, 01:27 |
| JekaZZ, я в своё время интересовался http://lists.trolltech.com/qt-interest/2007-08/thread00835-0.html. В общем, суть в том, что ты всё правильно предполагал: будет работать на машине с Qt, установленной в другом месте или не установленной вообще. Если место дислокации не совпадает с прошитым в dll'ку путём, то проблемы возникают только во время разработки(в частности, с qmake). Одно из красивых решений этой проблемы - junction(правда, поможет не всегда). |
| Автор: JekaZZ 24.12.2007, 13:58 |
| Новая проблема. Драйвер не грузится на машине, где нет VS. Программа не ругается ни на какие dll VC, так как таскает их с собой, но драйвер ibase не грузится. Причем, если стоит не 2005-я, а 6-я VS, то работает. Посмотрел зависимости qsqlibased.dll - нашел зависимоть от Msvcrtd.dll, скопировал в папку программы - не помогло. Посмотрел файловым монитором к чему обращается программа на машине, где работае и где не работает - результат одинаковый - и там и там не находит некоторые (одни и те же файлы типа манифестов и некоторых dll) файлы. Но при этом же работает на одной!!! Интересно обращается к qsqlibased.dll. Вот что показал монитор: 1) там, где работает: 2) где не работает: Добавлено через 10 минут и 52 секунды Я просто улыбаюсь со всей этой системы! Теперь драйвер ищется не в .\plugins\sqldrivers\ , а в \.sqldrivers\ . Почему так и от чего зависит- история умалчивает |
| Автор: just_geek 23.1.2008, 14:54 |
| решил не создавать похожую тему. Такая же проблема только с qsqlite драйвером. Перепробовал все варианты :( не хочет на другой машине драйвер грузится и все тут. Плагины валяются в path_to_myapp/plugins 1) копировал драйвер в папку c:\qt\4.3.3\plugins\sqldrivers\ 2) устанавливал QT_PLUGIN_PATH=path_to_myapp/plugins 3) создавал qt.conf 4) QApplication::setLibraryPath 5) QApplication::addLibraryPath На моей машине нормально работает, на другой нет... Уже не знаю, что делать. p.s. Qt 4.3.3 Open Source Edition скомпилирована на VC++ 2008 Express Edition. p.p.s. все переменные окружения относящиеся к qt на свой машине снес. |
| Автор: archimed7592 23.1.2008, 15:09 | ||||
just_geek, а симптомы какие?
JekaZZ, если Вас до сих пор интересуют причины, то я похоже догадываюсь:
|
| Автор: just_geek 23.1.2008, 15:16 |
| Симптом: Driver not loaded Да и список доступных драйверов пуст. |
| Автор: archimed7592 23.1.2008, 15:56 |
| Недавно такая же проблема разрешилась путём вкомпилирования драйвера в Qt(т.е. компилирования НЕ плагина). Если такое решение не устраивает, то можно попытаться выяснить в чём дело. Надеюсь, что Вы уверены, что проблема именно в драйвере(т.е. без попыток использования БД программа запускается), в таком случае качаем dependency walker и смотрим каких библиотек не хватает плагину и/или самому приложению. Плагин должен лежать в папке path_to_exe\plugins\sqldrivers. Смотреть зависимости желательно на том компьютере, на котором не запускается(я предпочитаю делать это в девственно чистой винде на виртуальной машине). |
| Автор: just_geek 23.1.2008, 15:59 |
| решил проблему в sqlite.pro надо было CONFIG -= embed_manifest_dll и пересобрать. Актуально только для VC++ 2005 и выше. |
| Автор: archimed7592 23.1.2008, 19:15 |
| Ух как |
| Автор: just_geek 24.1.2008, 09:23 |
| В ассистенте: страничка "Deploying an Application on Qt/Windows" |