Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QT 5.12.0 访问 Oracle 11g的问题



  • 现在用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读取的数据库驱动文件全部来自这个子文件夹,其已经自己带有一个slqite的驱动,所以访问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)做了特殊处理,这才导致问题的发生。
    有什么可以解决呢?



  • 该问题已经解决,不再需要回答。
    谢谢所有浏览过本贴的同人们。


Log in to reply