Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Не видит драйвер QPSQL на другой машине Qt

#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; }

Комментариев нет:

Отправить комментарий