在 Qt 中制作 Oci 驱动程序时找不到头文件
Posted
技术标签:
【中文标题】在 Qt 中制作 Oci 驱动程序时找不到头文件【英文标题】:Header files not found While making Oci Driver in Qt 【发布时间】:2012-09-22 16:16:01 【问题描述】:我按照http://doc.qt.digia.com/4.7-snapshot/sql-driver.html#general-information-about-the-oci-plugin 中给出的 Windows 说明编译了 Oracle Oci 驱动程序
在我用 mingw32-make 替换 nmake 的最后一步之前,一切顺利。 我明白了。
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/QtSDK/QtSources/4.7.4/src/sql/drivers/oci'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -
DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\QtSDK\
Desktop\Qt\4.7.4\mingw\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.7.4\mingw\includ
e\QtGui" -I"c:\QtSDK\Desktop\Qt\4.7.4\mingw\include" -I"c:\QtSDK\Desktop\Qt\4.7.
4\mingw\include\ActiveQt" -I"debug" -I"c:\QtSDK\Desktop\Qt\4.7.4\mingw\mkspecs\d
efault" -o debug\qsql_oci.o qsql_oci.cpp
In file included from qsql_oci.cpp:42:
qsql_oci.h:47:46: error: QtSql/private/qsqlcachedresult_p.h: No such file or dir
ectory
qsql_oci.cpp:50:23: error: qsqlerror.h: No such file or directory
qsql_oci.cpp:51:23: error: qsqlfield.h: No such file or directory
qsql_oci.cpp:52:23: error: qsqlindex.h: No such file or directory
qsql_oci.cpp:53:23: error: qsqlquery.h: No such file or directory
qsql_oci.cpp:65:17: error: oci.h: No such file or directory
随后出现了很多错误,但我想所有这些都与 make 无法找到头文件有关。谁能告诉我为什么会这样?我确实包含了前两个步骤中给出的所有 INCLUDE 和 LIB 的正确路径
更新:
我修改了 qmake -project 创建的 .pro 文件并添加了QT+= sql
,所有与sql相关的头错误都消失了,但第一个qsqlcachedresult_p.h
和最后一个oci.h
仍然存在。
【问题讨论】:
qsqlerror.h
在您的系统上实际位于何处?我猜不在 -I
选项中传递给 g++ 的路径中 - 这可能是导致错误的原因。
我检查过了。我所有的标题都在 c:\QtSDK\Desktop\Qt\4.7.4\mingw\include 中。这包含在 g++/ 的参数中
【参考方案1】:
尝试将include\QtSql
也添加到-I
选项。我不确切知道如何在这种环境下做到这一点,但也许正在运行
set CPP_FLAGS="-Ic:\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtSql"
在make
命令之前。
【讨论】:
我修改了 .pro 文件,但其他两个错误仍然存在。更新了我的问题。谢谢! 我明白了。所以2个文件仍然没有解决。也许他们期望一个不同的 qt 版本?使用oci.h
应该很容易,只需添加另一个-I
目录。但是如果没有路径QtSql/private/qsqlcachedresult_p.h
,那么现在可能无法编译。无论如何,这里需要对 QT 有更好了解的人。【参考方案2】:
为了解决剩下的两个标题问题,这就是我所做的-
对于 oci.h 文件,手动编辑 makefile.release 和 makefile.debug 以在 INCPATH 变量中包含头文件的路径。 (类似 -I"C:\XEClient\oci\include")。
qsqlcachedresult_p.h 位于 QT/src/sql/kernel 目录中。于是我把头文件复制到了C:\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtSql\private的新目录中。
之后编译没有错误。
这篇文章很有帮助-http://www.qtcentre.org/threads/41904-Oracle-Call-Interface-(OCI)-driver-problems。
【讨论】:
以上是关于在 Qt 中制作 Oci 驱动程序时找不到头文件的主要内容,如果未能解决你的问题,请参考以下文章