使用 PostgreSQL 编译静态 Qt 5.10.0 时出错
Posted
技术标签:
【中文标题】使用 PostgreSQL 编译静态 Qt 5.10.0 时出错【英文标题】:Error while compiling static Qt 5.10.0 with PostgreSQL 【发布时间】:2018-02-02 14:01:29 【问题描述】:我正在尝试在 Windows 7 上使用 mingw 编译带有 PostgreSQL 10(或 9.2,但同样的错误)的 Qt 5.10.0。
但是,当我包含 psql 包含和 lib 目录时,我总是在 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 -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。
任何关于如何解决此问题的想法将不胜感激,谢谢。
【问题讨论】:
【参考方案1】:您似乎最近没有构建 Qt(发布 5.8) - 不再支持 -I
和 -L
配置语法。
对我来说,postgres 可以正常工作,我只需要 -sql-psql
配置标志和系统路径中的库。
如果仅此一项不起作用,您可以通过添加以下配置标志来指定路径:
PSQL_INCDIR=C:\POSTGRESQL\10\include
PSQL_LIBDIR=C:\POSTGRESQL\10\lib
【讨论】:
确实已经有一段时间了,我认为是 5.2。谢谢! PSQL_INCDIR 和 PSQL_LIBDIR 成功了。好像我老了:) 算你幸运,因为我能及时得到一个快速明确的答案,我花了几周的时间来解决这个问题。以上是关于使用 PostgreSQL 编译静态 Qt 5.10.0 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)
如何在 静态编译的qt 5.5.1 中 使用数据库插件连接 odbc