簡體   English   中英

如何使用MinGW在Windows上構建Qt QOCI(Oracle數據庫驅動程序)?

[英]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”)運行正常。 唯一的問題是只創建了調試庫。 所以為了糾正這個問題,我不得不重復以下公式中的一些步驟:

  1. 鍵入原始Qt項目代碼,並將qmake行更改為“qmake oci.pro”CONFIG + = release“”。
  2. 編輯%QTDIR%\\ src \\ plugins \\ sqldrivers \\ oci中的makefile.release文件,如前所述。
  3. 再次輸入Qt Project代碼,現在沒有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 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM