使用 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

qt 5.6 怎么编译 qtWebView 或者 qtWebEngine

在 qt5 中设置链接器选项

Qt5.5.1和Qt5.3.2编译OCI驱动教程及验证方法

Qt 5.1 for OSX 安装只包含 clang_64 目录,如何使用 macports gcc 编译?