Russian Qt Forum
Ноябрь 23, 2024, 14:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 5.0 + Postgres 9.2 на Win8x64  (Прочитано 11931 раз)
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

Может, кто-то сталкивался с подобным, или есть идеи как побороть? А то уже замучился с пробами.
Записан
radislav72
Гость
« Ответ #1 : Март 14, 2013, 18:38 »

Попробовал, снес Постгрес 9, поставил 8.4. Драйвер (dll) сложился вообще без ошибок, правда тоже без 4 в названии (хотя старый драйвер для Постгрес 8.4 назывался qsqlpsqld4.dll). Но так же Qt не видит драйвера...
Записан
radislav72
Гость
« Ответ #2 : Март 15, 2013, 11:35 »

Возвращений на Qt 4.8 все сразу решило. Тот работает с любым Постгресом, и старым, и новым.

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

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

Так должно быть?
Записан
Crockus
Гость
« Ответ #3 : Март 15, 2013, 16:53 »

Попробовал, снес Постгрес 9, поставил 8.4. Драйвер (dll) сложился вообще без ошибок, правда тоже без 4 в названии (хотя старый драйвер для Постгрес 8.4 назывался qsqlpsqld4.dll). Но так же Qt не видит драйвера...
длл-ки где лежат?
Записан
0x6368656174
Гость
« Ответ #4 : Март 16, 2013, 08:58 »

Получилось заставить работать на Win7x32, может и вам поможет:
http://blog.itquasar.ru/2013/03/qt-5-postgresql-92-msvs-2010-on-windows.html
Записан
radislav72
Гость
« Ответ #5 : Март 25, 2013, 15:35 »

Спасибо, но мне нужно без MS VStudio, чтобы сохранить кроссплатформенность. То есть на Линуксе также нужно скомпилировать драйвер, поэтому решение должно быть не привязано к Studio
Записан
0x6368656174
Гость
« Ответ #6 : Март 28, 2013, 04:17 »

О_о На линуксе драйвера из коробки идут уже готовые))) У меня gentoo linux второй системой, там нечего специально компилировать не надо. А на винде лучше использовать MSVS для разработки, т.к. если Вы начнете работать с какими-нибудь сторонними библиотеками, отличными от Qt, то они процентов на 80 будут скомпилированы в MSVS, либо будет руководство как их там скомпилировать. А чтоб скомпилировать их под MinGW Вы потратите очень-очень много времени и испытаете огромное количество анальных болей (проверенно на собственном опыте). К тому же для работы в Qt, не нужна платная MSVS, хватит бесплатной Express версии.
Записан
radislav72
Гость
« Ответ #7 : Март 30, 2013, 19:22 »

Честно говоря, никогдя для проекта Qt не использовал Studio, хотя другие проеты как раз в ней и разрабатываю, и лицензионная на компе она установлена Улыбающийся А как с формами, разработанными в Qt Creator? Их Студия понимает? И как в Студии проэктировать окна, чтоб потом проэкт на Линуксе скомпилился?
Записан
Bepec
Гость
« Ответ #8 : Март 30, 2013, 20:22 »

Формы и в Creator и в VS отображаются с помощью дизайнера Улыбающийся

Так что всё нормально будет. Единственно - следует избегать платформозависимого кода Улыбающийся
Записан
0x6368656174
Гость
« Ответ #9 : Апрель 05, 2013, 09:40 »

Только что понадобилась поддержка PostrgeSQL и под MinGW. Компилируется практически так же. Инструкция: http://blog.itquasar.ru/2013/04/qt-5-postgresql-92-mingw-on-windows.html
Записан
0x6368656174
Гость
« Ответ #10 : Апрель 16, 2013, 09:16 »

Если кому-то понадобится, то вот как скомплировать QODBC (в основном юзается для подключения к MSSQL) драйвер используя MinGW http://blog.itquasar.ru/2013/04/qt-5-odbc-dirver-on-mingw.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 21.