Qt сборка драйвера для работы с PostgreSQL (Windows)

в 13:54, , рубрики: postgresql, qt, Qt Software, windows, метки: , ,

Небольшое лирическое отступление:
Написать эту заметку меня сподвигло наличие в интернете огромного количества инструкций которые просто цитируют документацию, а реально не работают. Т.к. я работаю с Qt время от времени, то не знаю как обстоят дела с данной проблемой в Qt5.

Проблема

В установку по умолчанию (по крайней мере для версии 4.8.4) драйвер для работы с Postgres не входит.
Официальная документация предлагает собирать его очень простым способом http://qt-project.org/doc/qt-4.8/sql-driver.html#qpsql, но если вы скачивали уже собранное Qt, то будете изрядно озадачены тем, что сборка проходит без ошибок, но ничего не работает.

Qt и SQL

Здесь следует слегка углубиться в особенности работы с sql-драйверами в Qt. Возможно два варианта их реализации:

  • встраивание драйвера в библиотеку QtSql
  • компиляция драйвера как plugin

При сборке Qt(http://doc.qt.digia.com/4.7/configure-options.html) за это отвечают следующие опции

  • -qt-sql-<driver> Enable a SQL <driver> in the Qt Library.
  • -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run time.

Посмотреть какие драйверы в вашей инсталляции собраны как plugin'ы можно вот по этому пути:
%QTDIR%pluginssqldrivers

Решение

А теперь переходим к сути проблемы и её простому решению.
Насколько я понимаю, по-умолчанию, SQL драйверы собираются статически, т.е. для линковки с QtSql. Поэтому в результате сборки по документации у нас получаются только *.а файлы, которые к существующей QtSql4.dll ну никак не прицепишь. Выход который часто встречается в сети — пересобрать Qt целиком включив нужные драйверы при конфигурации. В принципе вариант нормальный, но вот только очень долгий.

Естественно мы можем вручную поправить make-файлы и собрать нужный драйвер как plugin, но это занятие неблагодарное — пусть компьютер делает это за нас.

Далее предполагается, что PostgreSQL с нужными библиотеками и заголовочными файлами установлен в C:psql (я обычно ставлю его в Program Files, а C:psql это junction).

Ну а дальше всё быстро и просто:

  1. Запускаем командную строку Qt (Пуск->Программы->Qt by Digia...->Qt x.x.x Command Promt)
  2. Конфигурируем исходники и включаем нужный драйвер как plugin
    configure -I "c:psqlinclude" -L "c:psqllib" -plugin-sql-psql
  3. cd srcpluginssqldriverspsql
  4. qmake psql.pro
  5. make debug
  6. make release

Проверяем %QTDIR%pluginssqldrivers. Бинго!

Автор: magnitudo

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js