讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so

1.需求

最近linux下的Qt项目中要连接oracle数据库,用户需要我们访问他们的oracle数据库,查询数据

2.遇到的问题

qt连接oracle数据库需要oracle的驱动库libqsqloci.so插件,需要编译下,之前没有编译过,看了网上的很多都行不通,只好自己问同事查文档完成

3.解决方案

1.首先需要oracle数据库的sdk包和baisc包

sdk包提供编译所需的头文件,压缩包或者安装包里提供编译所需的依赖库文件

官网下载地址在这里:Instant Client for Linux x86-64 (64-bit) | Oracle 中国

basic压缩包下面这个,不用安装的,解压就行

sdk包下面这个,拉下去就有了

下载完成后,解压,我新建了两个文件夹后把解压的文件放进去,因为名字太长了

然后进入basic包里面,为这两个库生成软连接,qt编译需要用到

生成软连接命令:

ln -s libclntsh.so.11.1 libclntsh.so

ln -s libocci.so.11.1 libocci.so

然后我们进入qt的数据库驱动目录下,根据自己的安装位置找,终端切换到sqldrivers目录

输入:qmake执行,让其生成qtsqldrivers-config.pri

然后修改:qsqldriverbase.pri文件,改成如下,注释掉原来的,保存退出

cpp 复制代码
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include($$PWD/qtsqldrivers-config.pri)

然后进入oci目录,打开oci.pro文件,修改如下内容

注释掉:#QMAKE_USE += oci,在加入如下内容,如下所示

cpp 复制代码
QMAKE_LFLAGS += /home/yicaobao/sortware/oracle/basic-linux-x64/libocci.so

LIBS += -L/home/yicaobao/sortware/oracle/basic-linux-x64 -locci -lclntsh

INCLUDEPATH += /home/yicaobao/sortware/oracle/sdk-linux-x64/include
DEPENDPATH += /home/yicaobao/sortware/oracle/sdk-linux-x64/include

根据自己的实际路径来改,注意:路径不能有中文

改完后在终端进入oci目录,执行如下命令,make完成后就看到在相应的目录下生成了libqsqloci.so,libqsqloci.so.debug库

然后我们把第一个库文件libqsqloci.so拷贝到,程序所需的驱动目录下

除了这个编译的驱动,还需要几个库依赖,从basic目录下,把这几个库拷贝到你的库目录中,这个目录可以配置,在程序的pro目录下,配置即可,否则程序运行时会找不到,连接时报错

最后,再把basic目录下的libnnz11.so目录拷贝到程序所在目录中,不然连接oracle数据库会提示找不到这个依赖

最后,就可以连接oracle数据库了

如下还是打开数据库失败,在终端运行程序前输入,可查看插件加载运行的详细信息
export QT_DEBUG_PLUGINS=1

如果加载库失败,会提示相关的原因,如下提示了:无法加载库/home/yicaobao/svn/projects/VWEL-SCB/branches/test/SC3CForJL/bin/debug/sqldrivers/libqsqloci.so:(libnnz11.so: 无法打开共享对象文件: 没有那个文件或目录)

然后,完成,记录下来给后人分享吧,有什么疑问,可以评论区讨论一下

相关推荐
海山数据库4 分钟前
移动云大云海山数据库(He3DB)postgresql_anonymizer插件原理介绍与安装
数据库·he3db·大云海山数据库·移动云数据库
云飞云共享云桌面8 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
2501_9279935315 分钟前
SQL Server 2022安装详细教程(图文详解,非常详细)
数据库·sqlserver
星火s漫天17 分钟前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
xcLeigh22 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特22 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
xu_yule24 分钟前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
一灰灰blog41 分钟前
Spring AI中的多轮对话艺术:让大模型主动提问获取明确需求
数据库·人工智能·spring
Nandeska1 小时前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人2 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源