#qt #postgresql
Собрал релиз версию программы, которая работает с postgresql через qt-шный драйвер. Перенес туда все необходимые dll-ки, перенес папку plugins с драйвером. Экзешник запускается, драйвер видит, все замечательно. Но, когда переношу на другую машину драйвер qpsql не распознается. Я не уверен, но может быть на другую машину тоже нужно ставить клиент postgresql? Подскажите, кто сталкивался с подобной проблемой. UPD: В корне у меня находятся постгресовские dll: libeay32.dll libintl.dll libpq.dll ssleay.dll DependencyWalker просит для самого драйвера: LIBGCC_S_DW2-1.DLL LIBPQ.DLL LIBSTDC++-6.DLL QT5CORE.DLL QT5SQL.DLL Но это, вероятно, нормально потому что он находится в \plugins, а то что он просит есть в корне. dll постгреса просят следующее: MSVCR120.DLL IESHIMS.DLL Вероятно, msvcr120 - это и есть vcredist. Но, я поставил vcredistx86 и это не помогло. Компилил mingw32.
Ответы
Ответ 1
Нет, клиент PostgreSQL ставить не нужно. Нужны 3 dll-библиотеки из комплекта PostgreSQL: libintl8.dll, libpq.dll, lib(забыл)-2.dll (это приблизительные названия, могу ошибаться, сейчас с собой нет Postgres). Располагаться они должны рядом с основным исполняемым файлом. Кроме того, Postgres скомпилирован в Visual Studio, поэтому вам понадобится установить vcredist. Необходимую версию можно узнать с помощью DependencyWalker. А также соблюдайте разрядность. Она должна быть одинаковая у вашей программы, у vcredist, у библиотек Postgres. Драйвер базы данных необходимо поместить в папку sqldrivers. Причем, чтобы всё заработало, мне пришлось самому компилировать этот драйвер. Но раз у вас на основной машине всё работает, то, скорее всего, это не понадобится. Если не найдёте, точные названия могу написать завтра. UPD. Судя по названию MSVCR120.DLL, требуется vcredist версии 2013. ieshims.dll - это Internet Explorer. Скорее всего, этот файл будет не нужен. Файлы вроде Qt5Core.dll, Qt5Sql и др. должны быть рядом с исполняемым файлом, а файл qsqlpsql.dll должен быть в папке sqldrivers. UPD. Вот список нужных DLL: libiconv-2.dll libintl-8.dll libpq.dllОтвет 2
Попробуйте так: int main(int argc, char * argv[]) { qApp->addLibraryPath("plugins"); // путь к папке с плагинами // относительно рабочей папки процесса QApplication application(argc, argv); // ... все остальное return 0; }
Комментариев нет:
Отправить комментарий