最近两天,我花了很多时间尝试为Qt构建调试和发布Oracle数据库驱动程序。 Qt项目(link)中给出的手册远非完整,实际上事情比显示的要复杂得多。
经过多次尝试,我终于在网上一些不完整的帖子的帮助下设法建立了dll:
由于这两个来源都不完整,并且没有准确地教导如何创建dll,我将通过回答这个问题来写这个方法。
唯一仍然存在的疑问是:有更好的方法吗?我的意思是,我认为编译这些库的标准方法,如上面引用的Qt项目网站所示,应该没有我(和其他人)必须做的所有手册内容。那么我/我的Qt /其他任何东西都有问题或者Qt Project的手册是不完整的那就是那个?
答案 0 :(得分:4)
所以这是怎么做的:
初步说明:
我安装了QtSDK / QtCreator / Qt 4.8.1 32 lib,因此我的目录系统中有两个QtSources文件夹以及桌面(MinGW)和#34; Qt 4.8.1 for Desktop(MinGW)" - 为Qt使用准备的命令提示符。 A还安装了Oracle数据库32,文件夹为C:\ Oracle \ with" include"和" lib"文件夹里面。在"包括"有.h如oci.h和" lib"有.dlls和.lib,例如oci.dll,所有这些都是编译所必需的。在Qt项目文档之后,我添加" c:\ oracle \ bin"到PATH环境变量(计算机属性 - >高级系统设置 - >选项卡"高级" - >环境变量 - >系统变量部分)。
首先尝试:
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尝试遇到上面的include文件夹时遇到某种问题的结果,而第二个可能是Qt错误:qsqlcachedresult_p.h及其相应的文件夹实际上是丢失的。
第二个问题是通过将文件从其实际位置复制并粘贴到所需的缺失路径来解决的。它位于" C:\ QtSDK \ QtSources \ 4.8.1 \ src \ sql \ kernel"应该复制到" C:\ QtSDK \ Desktop \ Qt \ 4.8.1 \ mingw \ include \ QtSql \ private" (需要创建" private"文件夹)。
根据相同的来源,第一个问题应该通过在%QTDIR%\ src \ plugins \ sqldrivers \ oci中的makefile.release和makefile.debug文件中的INCPATH变量中放置Oracle include路径来纠正:
在调试中:
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")运行正常。唯一的问题是只创建了调试库。因此,为了纠正这个问题,我必须在以下公式中重复上述一些步骤:
现在,%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库。
我希望它会有所帮助!
Momergil