2013-07-11 61 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

相關問題