Здравствуйте!
Возникла необходимость перенести старый работающий проэкт с 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
Все хорошо.
Дальше
Появляется ошибка:
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
Может, кто-то сталкивался с подобным, или есть идеи как побороть? А то уже замучился с пробами.