[英]How to build 64-bit MinGW Qt application on Windows (with Qt Creator)
[英]How to build Qt QOCI (Oracle Database driver) on Windows with MinGW?
在过去的两天里,我花了很多时间尝试为Qt构建调试和发布Oracle数据库驱动程序。 Qt Project( 链接 )中给出的手册很不完整,实际上事情比显示的要复杂得多。
经过多次尝试,我终于在网上一些不完整的帖子的帮助下设法建立了dll:
由于两个来源都不完整,并且没有准确地教导如何创建dll,我将通过回答这个问题来写这个方法。
仍然存在的唯一疑问是:有更好的方法吗? 我的意思是,我认为编译这些库的标准方法,如上面引用的Qt项目网站所示,应该没有我(和其他人)必须做的所有手册内容。 那么我/我的Qt /其他任何东西都有问题或者Qt Project的手册是不完整的那就是那个?
所以这是怎么做的:
初步说明:
我安装了QtSDK / QtCreator / Qt 4.8.1 32 lib,所以我的目录系统中有两个QtSources文件夹以及“Qt 4.8.1 for Desktop(MinGW)” - 准备用于Qt的命令提示符。 A还安装了Oracle数据库32,文件夹为C:\\ Oracle \\,里面有“include”和“lib”文件夹。 在“include”中有.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”(需要创建“私有”文件夹)。
根据相同的来源,第一个问题应该通过在%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 dlls所在的文件夹位于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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.