Russian Qt Forum

Qt => Базы данных => Тема начата: radislav72 от Март 14, 2013, 15:26



Название: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: radislav72 от Март 14, 2013, 15:26
Здравствуйте!
Возникла необходимость перенести старый работающий проэкт с Qt 4.7 и Postgres 8.4 на новую платформу (см. тему).

На новой машине Win8x64, но Qt 5.0 32-битный, и Postgres 9 также 32-битный.

Пробую "по стандарту" собрать драйвер для Постгреса. Делаю, как всегда: в папке c:\Qt\Qt5.0.1\5.0.1\Src\qtbase\src\plugins\sqldrivers\psql\
Код:
qmake "INCLUDEPATH+=C:\psql\include" "LIBS+=C:\psql\lib\libpq.lib" psql.pro
Все хорошо.
Дальше
Код:
mingw32-make.exe
Появляется ошибка:
Цитировать
C:\psql\include/pthread.h:307:8: error: redefinition of 'struct timespec'

...

c:\qt\qt5.0.1\tools\mingw\bin\../lib/gcc/i686-w64-mingw32/4.7.2/../../../../i686-w64-mingw32/include/sys/timeb.h:90:8: error: previous definition of 'struct timespec'
Makefile.Release:391: recipe for target '.obj/release_shared/main.o' failed
mingw32-make.exe[1]: *** [.obj/release_shared/main.o] Error 1
mingw32-make.exe[1]: Leaving directory 'c:/Qt/Qt5.0.1/5.0.1/Src/qtbase/src/plugins/sqldrivers/psql'
makefile:38: recipe for target 'release-all' failed
mingw32-make.exe: *** [release-all] Error 2

Смотрю указанные файлы- структура timespec действительно обьявлена два раза- в файле pthread.h (из папки include Постгреса) и в файле из поставки Qt. Так как mingw32-make пишет, что  redefinition в файле pthread.h, модифицирую его (додавши #ifndef _TIMESPEC_DEFINED):
Код:
#ifndef _TIMESPEC_DEFINED
struct timespec {
        long tv_sec;
        long tv_nsec;
};
#endif /* _TIMESPEC_DEFINED */
_TIMESPEC_DEFINED обьявляется в "первом" файле при описи той же структуры.

Теперь mingw32-make.exe отрабатывает нормально- без ошибок-, и в папке c:\Qt\Qt5.0.1\5.0.1\Src\qtbase\plugins\sqldrivers\ появляются файлы:
Цитировать
libqsqlpsql.a
libqsqlpsqld.a
qsqlpsql.dll
qsqlpsqld.dll
Для старой версии Qt и Постгреса название библиотеки отличалось - qsqlpsqld4.dll . Теперь "4" отсутствует...
Но главаня проблема в том, что программа к Постгресу не коннектится:
Цитировать
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE

Пример из поставки Qt sqlbrowser также не видит драйвера.

В переменную окружения PATH вроде прописано все что надо:
Цитировать
c:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\;c:\Qt\Qt5.0.1\Tools\MinGW\bin\;c:\psql\bin\;c:\psql\lib\;C:\psql\include

Может, кто-то сталкивался с подобным, или есть идеи как побороть? А то уже замучился с пробами.


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: radislav72 от Март 14, 2013, 18:38
Попробовал, снес Постгрес 9, поставил 8.4. Драйвер (dll) сложился вообще без ошибок, правда тоже без 4 в названии (хотя старый драйвер для Постгрес 8.4 назывался qsqlpsqld4.dll). Но так же Qt не видит драйвера...


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: radislav72 от Март 15, 2013, 11:35
Возвращений на Qt 4.8 все сразу решило. Тот работает с любым Постгресом, и старым, и новым.

Видно, дело в Qt 5... Кто делал драйвер для пятерки (и получилось), напишите хоть как он должен называться.

В результате билда получается qsqlpsqld.dll
А в четвертой Qt - qsqlpsqld4.dll

Так должно быть?


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: Crockus от Март 15, 2013, 16:53
Попробовал, снес Постгрес 9, поставил 8.4. Драйвер (dll) сложился вообще без ошибок, правда тоже без 4 в названии (хотя старый драйвер для Постгрес 8.4 назывался qsqlpsqld4.dll). Но так же Qt не видит драйвера...
длл-ки где лежат?


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: 0x6368656174 от Март 16, 2013, 08:58
Получилось заставить работать на Win7x32, может и вам поможет:
http://blog.itquasar.ru/2013/03/qt-5-postgresql-92-msvs-2010-on-windows.html


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: radislav72 от Март 25, 2013, 15:35
Спасибо, но мне нужно без MS VStudio, чтобы сохранить кроссплатформенность. То есть на Линуксе также нужно скомпилировать драйвер, поэтому решение должно быть не привязано к Studio


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: 0x6368656174 от Март 28, 2013, 04:17
О_о На линуксе драйвера из коробки идут уже готовые))) У меня gentoo linux второй системой, там нечего специально компилировать не надо. А на винде лучше использовать MSVS для разработки, т.к. если Вы начнете работать с какими-нибудь сторонними библиотеками, отличными от Qt, то они процентов на 80 будут скомпилированы в MSVS, либо будет руководство как их там скомпилировать. А чтоб скомпилировать их под MinGW Вы потратите очень-очень много времени и испытаете огромное количество анальных болей (проверенно на собственном опыте). К тому же для работы в Qt, не нужна платная MSVS, хватит бесплатной Express версии.


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: radislav72 от Март 30, 2013, 19:22
Честно говоря, никогдя для проекта Qt не использовал Studio, хотя другие проеты как раз в ней и разрабатываю, и лицензионная на компе она установлена :) А как с формами, разработанными в Qt Creator? Их Студия понимает? И как в Студии проэктировать окна, чтоб потом проэкт на Линуксе скомпилился?


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: Bepec от Март 30, 2013, 20:22
Формы и в Creator и в VS отображаются с помощью дизайнера :)

Так что всё нормально будет. Единственно - следует избегать платформозависимого кода :)


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: 0x6368656174 от Апрель 05, 2013, 09:40
Только что понадобилась поддержка PostrgeSQL и под MinGW. Компилируется практически так же. Инструкция: http://blog.itquasar.ru/2013/04/qt-5-postgresql-92-mingw-on-windows.html


Название: Re: Qt 5.0 + Postgres 9.2 на Win8x64
Отправлено: 0x6368656174 от Апрель 16, 2013, 09:16
Если кому-то понадобится, то вот как скомплировать QODBC (в основном юзается для подключения к MSSQL) драйвер используя MinGW http://blog.itquasar.ru/2013/04/qt-5-odbc-dirver-on-mingw.html