2013-07-11 62 views
4

我花了两天的时间试图为Qt构建调试和发布Oracle数据库驱动程序,但都没有成功。 Qt项目(link)中给出的手册远远不完整,实际情况比所示的要复杂得多。如何使用MinGW在Windows上构建Qt QOCI(Oracle数据库驱动程序)?

大量尝试后,我终于在网络上有的还残缺职位的帮助下建立的dll:

由于这两种来源是不完整的,并没有完全教导如何创建dll,我会通过回答这个问题来写这里的方法。

唯一的疑问仍然是:有没有更好的方法来做到这一点?我的意思是,我想,编译这些库的标准方式,如上面引用的Qt Project网站所示,应该没有我(和其他人)必须做的所有手动工作。那么在我/我的Qt /其他方面有什么问题吗?或者Qt Project的手册不完整,那是什么?

回答

4

因此,这是如何做到这一点:

Preliminar笔记:

我QTSDK/QtCreator/QT 4.8.1 32 LIB安装,所以我在我的目录系统都QtSources文件夹以及“Qt 4.8.1 for Desktop(MinGW)” - 准备好使用Qt的命令提示符。 A还安装了带有“include”和“lib”文件夹的文件夹C:\ Oracle \的Oracle数据库32。在“include”中有.h,如oci.h,在“lib”中有.dlls和.lib,如oci.dll,它们都是编译时所需的。在Qt项目文档之后,我将“c:\ oracle \ bin”添加到PATH环境变量(计算机属性 - >高级系统设置 - >选项卡“高级” - >环境变量 - >系统变量部分)。

首先尝试:

(用于调试LIB实际上一个)默认代码编译为Qt的项目网站,调整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”(需要创建“私人”文件夹)。

根据同一来源,第一个问题应该通过将makefile.release和makefile中的INCPATH变量放在Oracle包含路径中来解决。在调试文件%QTDIR%\型钢\插件\ sqldrivers \ OCI:

在调试:

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" 

(我也把库路径只是为了保证)。

手动调整这两个文件的问题是,当您下次键入“qmake oci.pro”时,它们都将被重新创建,并且调整丢失。所以现在你应该再次输入Qt Project的代码,但没有那个“qmake oci.pro”行。

第二个尝试:

当这样做的目的,前两个问题得到了解决,但比ld.exe报道,找不到-loci(该OCI.DLL文件)。为了解决这个问题,我把在LIBS变量OCI库路径:

在调试:

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项目的代码(没有 “QMAKE oci.pro”)运行正常。唯一的问题是只有调试库被创建。因此,要解决这个问题,我不得不重复一些步骤上面下面的公式:

  1. 键入原始的Qt项目代码的qmake改为“QMAKE oci.pro‘CONFIG + =发布’”。
  2. 像以前一样编辑%QTDIR%\ src \ plugins \ sqldrivers \ oci中的makefile.release文件。
  3. 再次键入Qt项目代码,现在没有qmake行。

而现在的DLL和释放模式.a文件也应在其各自的文件夹中遇到内部%QTDIR%\型钢\插件\ sqldrivers \ OCI。

整理:

最后,文件libqsqloci4.a,qsqloci4.dll(释放),libqsqlocid4.a,qsqlocid4.dll(调试)复制到C:\ QTSDK \桌面\的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

相关问题