現在用QT5.12.0做一個專案,需要訪問Oracle 11g資料庫,按照教程編譯生成了qsqloci.dll/qsqlocid.sll/qsqloci.a/qsqlocid.a等四個檔案,拷貝到QT目錄下的mingw73_64的Plugins下的sqldrivers目錄下,新建一個普通QT專案,按照常規流程,可以訪問Oracle的資料庫、表。接下來問題來了。
在專案中我使用了QTitanRibbon 5.10,生成一個Ribbon QT Application后,默認編譯得到的可執行程式在QTitanRibbon的bin目錄下,這里有一堆已經給出的QT相關dll,還自己帶了一個sqldrivers的子目錄,我開始沒有注意,后來才發現,Ribbon QT Application讀取的資料庫驅動檔案全部來自這個子檔案夾,其已經自己帶有一個sqlite的驅動,所以訪問sqlite資料庫沒問題。如果我還是按照QT Application的做法,在mingw73_64的Plugins下的sqldrivers下存放那四個檔案,則在程式中訪問Oracle會出現driver not loaded的問題,但是程式不會crash,如果將這四個檔案放入bin目錄下的sqldrivers目錄下,訪問database::drivers()時會出現“QOCI”和“QOCI8”兩個驅動,然而在程式中訪問Oracle,程式會crash,追蹤錯誤資訊,顯示為“cannot mix incompatible Qt library (version 0x50c00) with this library (version 0x50d00)”,使用debug,會出現一條提示說從作業系統收到一個singal,但是signal的內容顯示為問號。
我還試過網上說的使用QLibrary直接加載oracle的實體目錄下的oci.dll,還是一樣,只要bin目錄下的sqldrivers目錄下有那四個編譯的驅動檔案,基本上就是crash,提示資訊一樣。
經過測驗(將QT的 mingw73_64下面的plugins/sqldrivers目錄下的sqlite驅動拷貝到QTitanRibbon的bin目錄sqldrivers子目錄下,覆寫原來的SQLITE驅動檔案),運行程式,同樣出現“cannot mix incompatible Qt library (version 0x50c00) with this library (version 0x50d00)”的錯誤,應該是驅動程式在編譯的時候(使用QTitanRibbon 5.10)做了特殊處理,這才導致問題的發生。
請教各位大神!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/22951.html
標籤:開發
上一篇:怎么建三張表
