Pull to refresh

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

Reading time2 min
Views25K
Небольшое лирическое отступление:
Написать эту заметку меня сподвигло наличие в интернете огромного количества инструкций которые просто цитируют документацию, а реально не работают. Т.к. я работаю с 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%\plugins\sqldrivers

Решение


А теперь переходим к сути проблемы и её простому решению.
Насколько я понимаю, по-умолчанию, 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:\psql\include" -L "c:\psql\lib" -plugin-sql-psql
  3. cd src\plugins\sqldrivers\psql
  4. qmake psql.pro
  5. make debug
  6. make release

Проверяем %QTDIR%\plugins\sqldrivers. Бинго!
Tags:
Hubs:
Total votes 9: ↑6 and ↓3+3
Comments2

Articles