PostgreSQL and Trying to connect using Qt
-
But c:\pgsql93_86\include\ is not in the maker's includepath
See my suggestion item 11.:
[11. start building the plugins:
C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin\qmake “INCLUDEPATH+=%POSTGRES32%\include” “LIBS+=%POSTGRES32%\lib\libpq.lib” psql.pro]
good luck! -
And what if you replace %POSTGRES32% with the actual path BUT using forward slashes
-
result (again)
@C:\QT\5.2.1\Src\qtbase\src\plugins\sqldrivers\psql>C:\Qt\5.2.1\mingw48_32\bin\qmake "INCLUDEPATH+=c:/psql93_x86/include" "LIBS+=c:/psql93_x86/lib/libpq.lib" psql.proC:\QT\5.2.1\Src\qtbase\src\plugins\sqldrivers\psql>mingw32-make debug
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/QT/5.2.1/Src/qtbase/src/plugins/sqldrivers/psql'
g++ -c -pipe -fno-keep-inline-dllexport -g -std=c++0x -fno-exceptions -frtti -Wall -Wextra -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1\QtSql" -I"C:\Qt\5.2.1\mingw48_32\include" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1\QtCore" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore" -I".moc\debug" -I"........\mkspecs\win32-g++" -o .obj\debug\qsql_psql.o ......\sql\drivers\psql\qsql_psql.cpp
......\sql\drivers\psql\qsql_psql.cpp:59:22: fatal error: libpq-fe.h: No such file or directory
#include <libpq-fe.h>
^
compilation terminated.
Makefile.Debug:497: recipe for target '.obj/debug/qsql_psql.o' failed
mingw32-make[1]: *** [.obj/debug/qsql_psql.o] Error 1
mingw32-make[1]: Leaving directory 'C:/QT/5.2.1/Src/qtbase/src/plugins/sqldrivers/psql'
makefile:48: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2
@Relevant env vars:(edited for readability)
Path=
C:\Qt\5.2.1\mingw48_32\bin;
C:\Qt\Tools\mingw48_32\bin;
C:\Qt\Tools\QtCreator\bin;
C:\psql93_x86\bin;
C:\psql93_x86\lib;
C:\psql93_x86\include;
C:\psql93_x86\include\libpq;
C:\Perl\site\bin;
C:\Perl\bin;
C:\Windows;
C:\Windows\system32;
C:\Program Files\doxygen\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.BPL;.lib
POSTGRES32=c:\psql93_x86
POSTGRES322=c:/psql93_x86
QTSDK_DRIVERSPATH=C:\QT\5.2.1\mingw48_32\plugins\sqldrivers
QTSDK_DRIVERSPATH2=C:/QT/5.2.1/mingw48_32/plugins/sqldrivers
QT_SRC_PATH=C:\Qt\5.2.1\Src\qtbase
QT_SRC_PATH2=C:/Qt/5.2.1/Src/qtbase -
tried a different approach, still NOK.
copied all of the c:\psql93_x86\include folder (+subdirs) into C:\QT\5.2.1\Src\qtbase\src\plugins\sqldrivers\psql (directory the make enters before the fail)
it gets further before borking.
@C:\Qt\5.2.1\mingw48_32\bin\moc.exe -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D__GNUC__-DWIN32 -I. -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1\QtSql" -I"C:\Qt\5.2.1\mingw48_32\include" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1\QtCore" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore" -I".moc\debug" -I"........\mkspecs\win32-g++" ......\sql\drivers\psql\qsql_psql_p.h -o .moc\debug\moc_qsql_psql_p.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -std=c++0x -fno-exceptions -frtti -Wall -Wextra -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1\QtSql" -I"C:\Qt\5.2.1\mingw48_32\include" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1\QtCore" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore" -I".moc\debug" -I"........\mkspecs\win32-g++" -o .obj\debug\moc_qsql_psql_p.o.moc\debug\moc_qsql_psql_p.cpp
g++ -shared -Wl,--out-implib,C:\QT\5.2.1\Src\qtbase\plugins\sqldrivers\libqsqlpsqld.a -o ........\plugins\sqldrivers\qsqlpsqld.dll .obj/debug/main.o .obj/debug/qsql_psql.o .obj/debug/moc_qsql_psql_p.o -lpq -LC:\Qt\5.2.1\mingw48_32\lib -lQt5Sqld -lQt5Coredc:/qt/tools/mingw48_32/bin/../lib/gcc/i686-w64-mingw32/4.8.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lpq
collect2.exe: error: ld returned 1 exit status
Makefile.Debug:80: recipe for target '........\plugins\sqldrivers\qsqlpsqld.dll' failed
mingw32-make[1]: *** [........\plugins\sqldrivers\qsqlpsqld.dll] Error 1
mingw32-make[1]: Leaving directory 'C:/QT/5.2.1/Src/qtbase/src/plugins/sqldrivers/psql'
makefile:48: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2@
i'm so close i can smell the SELECT*, but still no cigar -
You are using mingw32's gcc to compile qt and trying to use postgreql library compiled with MSVC.
MSVC uses .LIB for libraries while Mingw32 (gcc + binutils) uses .a or .so files for libraries.
You can try either of the following methods: a. compile Qt using MSVC. b. use mingw32 to compile postgresql and use its libraries.
From:
http://stackoverflow.com/questions/5487236/building-qt-postgresql-driveranyone have an easy to follow 'how to build postgres from sources with mingw '?
or easier still, how to "use" the "QT" ODBC driver instead? -
...
just build libpq.a from sources . . . .
http://pgolub.wordpress.com/2008/12/15/building-postgresql-client-library-using-mingw-under-winxp-sp3/don't know what to do with it.
sorry for by n00bness, people... -
It is not necessary to compile postgresql, I used the binaries 32-bit and with installing ./lib and ./include had been provided, too.
Your make does not recognise the psql includes (the stuff, that follows -I) and that's why you still receive the message 'libpq-fe.h not found'.
Do you see the same error if you use backslashed paths with you qmake command? Qt uses forward slashes but I had success with the backslashed command. -
Just to be sure, wouldn't by any chance libpq-fe.h be in include/libpq ? If so it's that last element that was missing.
-
Indeed, but you need to give the full path to libqp-fe.h not just the path that contains the libpq folder.
Please avoid having spaces in your path when developing, it something that is not working very well on windows
-
on my system i installed postgreSQL x86 9.3 to c:\psql93_x86\
so... the qmake command where i specify the INCLUDE+=, LIBS+= etc . . .
i need to tell it precisely and exactly where libqp-fe.h is, including full path ?how do I do that, i.e. what separator do i use to add more than one entry into the "INCLUDE+=" that i've already specified (using clochydd's tuto on page 2. .) ?
-
Go to the Qt plugin source directory:
cd QT_SRC_PATH\src\plugins\sqldrivers\psqlStart building the plugins:
(Change this to your mingw32 path: C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin)
C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin\qmake “INCLUDEPATH+=c:\psql93_x86\include”
“LIBS+=c:\psql93_x86\lib\libpq.lib” psql.pro -
libpq-fe.h being in include/libpq
You should use
@“INCLUDEPATH+=c:/psql93_x86/include/libpq”@
-
just tried making the odbc driver again...
and get the Driver not Loaded message :)
C:\QT\5.2.1\Src\qtbase\src\plugins\sqldrivers\psql>c:\Qt\5.2.1\mingw48_32\bin\qm
ake.exe "INCLUDEPATH+=c:/psql93_x86/include/libpq" "LIBS+=c:/psql93_x86/lib/libp
q.lib" psql.proC:\QT\5.2.1\Src\qtbase\src\plugins\sqldrivers\psql>mingw32-make debug
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/QT/5.2.1/Src/qtbase/src/plugins/sqldrive
rs/psql'
g++ -c -pipe -fno-keep-inline-dllexport -g -std=c++0x -fno-exceptions -frtti -Wa
ll -Wextra -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEP
TIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -I"C:\Qt\5.2.1\mingw48_32\inclu
de\QtSql\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql\5.2.1\QtSql" -I"C:\Qt\5.
2.1\mingw48_32\include" -I"C:\Qt\5.2.1\mingw48_32\include\QtSql" -I"C:\Qt\5.2.1
mingw48_32\include\QtCore\5.2.1" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore\5.2.1
QtCore" -I"C:\Qt\5.2.1\mingw48_32\include\QtCore" -I".moc\debug" -I"........
mkspecs\win32-g++" -o .obj\debug\qsql_psql.o ......\sql\drivers\psql\qsql_psql
.cpp
......\sql\drivers\psql\qsql_psql.cpp:59:22: fatal error: libpq-fe.h: No such
file or directory
#include <libpq-fe.h>
^
compilation terminated.
Makefile.Debug:497: recipe for target '.obj/debug/qsql_psql.o' failed
mingw32-make[1]: *** [.obj/debug/qsql_psql.o] Error 1
mingw32-make[1]: Leaving directory 'C:/QT/5.2.1/Src/qtbase/src/plugins/sqldriver
s/psql'
makefile:48: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2 -
http://pastebin.com/4cpqVMiN
folder contents -
Thanks for the data! I can see our "fatal" libpq-fe.h in c:\psql93_x86\include. So as a first step I suppose to test with:
C:\QT\5.2.1\Src\qtbase\src\plugins\sqldrivers\psql>c:\Qt\5.2.1\mingw48_32\bin\qmake.exe “INCLUDEPATH+=c:\psql93_x86\include” “LIBS+=c:\psql93_x86\lib\libpq.lib” psql.pro
I know, the backslashes are a bit unusual for Qt but it worked with my installs so give it a try! Good luck!