我试图在Windows 7上使用mingw编译Qt 5.10.0和PostgreSQL 10(或9.2,但是同样的错误)。
然而,当我包含psql include和lib dirs时,我总是在mingw32-make之后得到以下错误:
g++ -c -fno-keep-inline-dllexport -O2 -std=c++1z -fno-exceptions -Wextra -Wall -
W -Wvla -Wdate-time -DUNICODE -D_UNICODE -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -
DQT_MOC -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_COMPRESS -DQ
T_NO_FOREACH -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_USE_QSTRINGBUILDER -D
QT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_BOOTSTRAP_LIB -DQT_VERSION_STR="\"5.10.0\""
-DQT_VERSION_MAJOR=5 -DQT_VERSION_MINOR=10 -DQT_VERSION_PATCH=0 -DQT_BOOTSTRAPPE
D -DQT_NO_CAST_TO_ASCII -I. -I. -I..\..\..\include -I..\..\..\include\QtCore -I.
.\..\..\include\QtCore\5.10.0 -I..\..\..\include\QtCore\5.10.0\QtCore -I..\..\..
\include\QtXml -I..\..\..\include\QtXml\5.10.0 -I..\..\..\include\QtXml\5.10.0\Q
tXml -IC:\POSTGRESQL\10\include -I..\..\..\mkspecs\win32-g++ -o .obj\release\m
oc.o moc.cpp
In file included from symbols.h:33:0,
from parser.h:32,
from moc.h:32,
from moc.cpp:30:
token.h:65:7: error: expected identifier before 'void'
F(THIS) \
^
token.h:216:33: note: in definition of macro 'CREATE_ENUM_VALUE'
#define CREATE_ENUM_VALUE(Name) Name,
^
...
token.h:263:1: error: expected declaration before '}' token
};
^
Makefile.Release:314: recipe for target '.obj/release/moc.o' failed
我用谷歌搜索并在qt论坛上找到了一个线程,其中有人有相同的错误,但没有解决方案: https://forum.qt.io/topic/66218/trubble-with-static-qt5-6-0-with-qt-sql-psql-compiling-from-source
我的configure命令如下所示:
configure -prefix C:\Qt\Static\5.10.0 -static -release -nomake tests -nomake examples -confirm-license -I"C:\POSTGRESQL\10\include" -L"C:\POSTGRESQL\10\lib" -opensource -qt-zlib -qt-libpng -qt-libjpeg -sql-psql -opengl desktop
如果我删除
,编译工作正常-I"C:\POSTGRESQL\10\include"
-L"C:\POSTGRESQL\10\lib"
但显然没有psql。
非常感谢有关如何解决此问题的任何想法,谢谢。
答案 0 :(得分:1)
好像你最近没有构建Qt(5.8后) - 不再支持-I
和-L
配置语法。
对我来说postgres正常工作,我需要的只是-sql-psql
配置标志和系统路径中的库。
如果单独这样做不起作用,您可以通过添加以下配置标志来指定路径:
PSQL_INCDIR=C:\POSTGRESQL\10\include
PSQL_LIBDIR=C:\POSTGRESQL\10\lib