Задать вопрос
@odexed

Как собрать драйвер PostgreSQL для Qt под Windows 10?

Необходимо создать минимально работающее Qt приложение для подключения и взаимодействия с СУБД PostgreSQL. Из коробки не работает. ОС - windows 10 64bit, Версия Qt - Qt 5.9.5 MSVC 2015, MS Visual Studio 2017 Community, PostgreSQL 9.6 (пробовал как 32bit, так и 64bit)
Проверяю таким кодом:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    qDebug() << db.isValid();
    db.setHostName("hostname");
    db.setPort(5432);
    db.setDatabaseName("dbname");
    db.setUserName("username");
    db.setPassword("password");
    if (!db.open())
    {
        qDebug() << db.lastError().text();
        return;
    }

В результате:
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
false

При этом файл qsqlpsql.dll в поддиректории Qt msvc2017_64\plugins\sqldrivers есть. Из чего я сделал вывод, что драйвер надо скомпилировать вручную.
Открываю командную строку Qt 5.9.5 64bit for Desktop (MSVC 2017), перехожу в папку C:\Qt\Qt5.9.5\5.9.5\Src\qtbase\src\plugins\sqldrivers\psql, набираю команду
qmake "INCLUDEPATH+=\"C:\Program Files (x86)\PostgreSQL\9.6\include\"" "LIBS+=\"C:\Program Files (x86)\PostgreSQL\9.6\lib\libpq.lib\"" psql.pro

В результате:
Project ERROR: Library 'psql' is not defined.

Пытался также собрать через Qt Creator
Project ERROR: Library 'psql' is not defined.
Cannot read /qtsqldrivers-config.pri: No such file or directory
Project ERROR: Library 'psql' is not defined.


Пытался собрать также всю ветку sqldrivers, аналогично:
Project ERROR: Library 'psql' is not defined.


Есть ли вообще возможность собрать какую-то работающую связку?
  • Вопрос задан
  • 3089 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
@odexed Автор вопроса
Получилось решить проблему с помощью Dependence Walker-а. Действительно, проблема решилась не компиляцией, а копированием в папку с программой нужных dll. Конкретно, скопировал туда libpq.dll, libeay32.dll, ssleay32.dll, libintl-8.dll, libiconv-2.dll, msvcr120.dll, туда же папку sqldrivers с dll из C:\Qt\Qt5.9.5\5.9.5\msvc2017_64\plugins\sqldrivers. Убедился только, что битность совпадает, и все заработало.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
fzfx
@fzfx
18,5 дм
вывод неверный. вам надо не собрать драйвер. следует подключить его в вашем коде (но это не точно).
ну и у вас ещё должен быть установлен как минимум клиент postgresql, а его каталог с бинарниками должен быть включён в системный PATH.
Ответ написан
@Gytim
Такое замечал если ранее устанавливалась более старая постгря. Решил очисткой системных путей, гдето в свойствах компа было.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы