所以这是如何做到的:
初步说明:
我安装了 QtSDK/QtCreator/Qt 4.8.1 32 lib,所以我的目录系统中有 QtSources 文件夹以及“Qt 4.8.1 for Desktop (MinGW)” - 准备与 Qt 一起使用的命令提示符。A 还安装了带有文件夹 C:\Oracle\ 的 Oracle 数据库 32,其中包含“include”和“lib”文件夹。在“include”中有 .h,例如 oci.h,在“lib”中有 .dll 和 .lib,例如 oci.dll,它们都是编译所必需的。按照 Qt 项目文档,我将“c:\oracle\bin”添加到 PATH 环境变量(计算机属性 -> 高级系统设置 -> 选项卡“高级” -> 环境变量 -> 系统变量部分)。
第一次尝试:
编译的默认代码(实际上是 debug lib 的一个)如 Qt Project 网站所示,针对 MinGW 进行了调整,如下所示:
set INCLUDE=%INCLUDE%;c:\oracle\oci\include
set LIB=%LIB%;c:\oracle\oci\lib\msvc
cd %QTDIR%\src\plugins\sqldrivers\oci
qmake oci.pro
mingw32-make
%QTDIR% 表示 Qt 源代码所在的文件夹。就我而言,这是:“C:\QtSDK\QtSources\4.8.1\”。提示:将此代码放入批处理文件(name.bat)中。
遇到的第一个问题是一些文件被报告丢失:oci.h 和 qsqlcachedresult_p.h。第一个是 mingw 尝试遇到上面的包含文件夹时某种问题的结果,而第二个可能是 Qt 错误:qsqlcachedresult_p.h 及其各自的文件夹实际上丢失了。
第二个问题是通过将文件从其实际位置复制并粘贴到所需的缺失路径来解决的。它位于“C:\QtSDK\QtSources\4.8.1\src\sql\kernel”,应复制到“C:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtSql\private”(需要创建“私人”文件夹)。
根据同一来源,应通过将 Oracle 包含路径放在 %QTDIR%\src\plugins\sqldrivers\oci 中的 makefile.release 和 makefile.debug 文件中的 INCPATH 变量中来纠正第一个问题:
在调试中:
INCPATH = -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" (...) -I"c:\Oracle\include" -I"c:\Oracle\lib\msvc"
发布中
INCPATH = -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" (...) -I"c:\Oracle\include" -I"c:\Oracle\lib\msvc"
(我也放了 lib 路径只是为了保证)。
手动调整这两个文件的问题在于,下次您键入“qmake oci.pro”时,它们都将被重新创建并且调整会丢失。所以现在您应该再次输入 Qt Project 的代码,但不要输入“qmake oci.pro”行。
第二次尝试:
完成后,前两个问题解决了,但 ld.exe 报告找不到 -loci(oci.dll 文件)。为了纠正这个问题,我将 oci lib 路径放在 LIBS 变量中:
在调试中:
LIBS = -L"c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4 -L"c:\Oracle\lib\msvc"
发布也一样。
第三次尝试:
完成此操作后,输入 Qt Project 的代码(没有“qmake oci.pro”)运行正常。唯一的问题是只创建了调试库。所以为了纠正这个问题,我不得不在下面的公式中重复上面的一些步骤:
- 键入原始 Qt 项目代码,将 qmake 行更改为“ qmake oci.pro "CONFIG+=release" ”。
- 像以前一样编辑 %QTDIR%\src\plugins\sqldrivers\oci 中的 makefile.release 文件。
- 再次键入 Qt 项目代码,现在没有 qmake 行。
现在在 %QTDIR%\src\plugins\sqldrivers\oci 内的相应文件夹中也应该会遇到用于发布模式的 dll 和 .a 文件。
精加工:
最后,将文件 libqsqloci4.a, qsqloci4.dll (release), libqsqlocid4.a, qsqlocid4.dll (debug) 复制到 C:\QtSDK\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers sql dll所在的文件夹位于供 MinGW 使用它们,并且您应该能够在 Qt 中使用 OCI 驱动程序没问题。要进行测试,请转到 Qt Creator 并键入以下或类似的代码:
if (!QSqlDatabase::isDriverAvailable("QOCI"))
cout << "FAILURE: No Oracle Database driver available." << endl;
else
cout << "SUCCESS: Oracle Database driver found." << endl;
教程结束。
得出的结论:线条
set INCLUDE=%INCLUDE%;c:\oracle\oci\include
set LIB=%LIB%;c:\oracle\oci\lib\msvc
在原始 Qt 项目代码中可能无济于事。同样键入原始代码只会编译调试 OCI 库。
我希望它会有所帮助!
莫默吉尔