QT 访问Oracle 11g的问题

weixin_45431384 2019-12-08 02:17:55
现在用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)做了特殊处理,这才导致问题的发生。
请教各位大神!
...全文
71 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧