Сбой программы Qt4, если не установлен SDK - PullRequest
2 голосов
/ 20 октября 2010

Я написал программу с открытым исходным кодом, которую я выпустил как GPL, построенную с использованием Qt4 LGPL SDK. Эта программа имеет возможность поиска дополнительной базы данных Sqlite3.

Вот что заставляет меня сойти с ума. Я компилирую программу на компьютере разработчика. Когда я пытаюсь запустить его, я могу ошибки об отсутствующих DLL. Я копирую эти библиотеки в тот же каталог, что и исполняемый файл, и теперь он работает нормально (mingwm10.dll, libgcc_s_dw2-1.dll, QtCore4.dll, QtSql4.dll, QtGui4.dll), включая поиск в базе данных.

Теперь, если я скопирую эту папку с исполняемым файлом и библиотеками DLL на новый компьютер, на котором не установлен SDK, он будет работать до тех пор, пока я не попытаюсь выполнить поиск. Как только я нажму кнопку поиска, у меня может появиться следующая ошибка:

Title: Microsoft Visual C++ Runtime Library
Runtime Error!
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Затем я загружаю и устанавливаю SDK, больше ничего не делая, теперь я могу запустить программу и просто найти файл sqlite3!

Какую магию мне не хватает?

P.S. Обе машины являются недавно установленными системами Windows XP.

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

У вас могут быть некоторые библиотеки или плагины Qt, которые не развернуты на целевой машине. Скорее всего, это плагин драйвера SQL. Вот некоторая информация об этом: http://doc.trolltech.com/latest/deployment-windows.html#qt-plugins

Вам нужно будет скопировать необходимые плагины Qt в каталог рядом с вашим исполняемым файлом. И добавьте что-то вроде этого в ваш main():

 QApplication::addLibraryPath(QCoreApplication::applicationDirPath() + "/plugins");

(отредактированная ссылка и добавленный код)

0 голосов
/ 22 октября 2010

Я нашел проблему.

Стивен Чу был прав в том, что мне не хватало драйвера sqlite.Тем не менее, я могу столкнуться с более сложными проблемами.

SDK поставляется с двумя наборами DLL.Один набор находится в $ BASEDIR / bin, а другой - в $ BASEDIR / qt / bin.Первая содержит библиотеки, используемые Qt Creator, а вторая - библиотеки, которые вы хотите отправить вместе с исполняемым файлом.

Мне нужно было взять плагин sqlite (qsqlite4.dll) и скопировать его в APP_DIR / sqlplugins,Моя проблема заключалась в том, что я использовал неправильный файл qsqlite4.dll.

Большое спасибо всем, кто внес вклад в этот вопрос.

Для дальнейшего использования этот вопрос также обсуждался здесь: http://www.qtforum.org/article/34639/qt4-program-crashing-unless-sdk-installed.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...