当前位置: 首页 > news >正文

讲解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文件,改成如下,注释掉原来的,保存退出

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include($$PWD/qtsqldrivers-config.pri)

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

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

QMAKE_LFLAGS += /home/yicaobao/sortware/oracle/basic-linux-x64/libocci.soLIBS += -L/home/yicaobao/sortware/oracle/basic-linux-x64 -locci -lclntshINCLUDEPATH += /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: 无法打开共享对象文件: 没有那个文件或目录)

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

相关文章:

  • R语言基础的代码语法解译笔记
  • 通过OceanBase 3.x中not in无法走hash连接的变化,来看OB优化器的发展
  • 2024蓝桥杯每日一题(区间合并)
  • pdf也可以制作成可翻页的电子书吗?
  • sensitive-word 敏感词 违规文字检测
  • python字符串转换成字典
  • 【论文速读】| 大语言模型引导的协议模糊测试
  • 【Java探索之旅】运算符解析 算术运算符,关系运算符
  • 我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
  • 【完美实现】VITE + VUE3 + SVG图片解析+element-plus开发环境初始化(基于macos)
  • 面试宝典-【redis】
  • ECharts饼图图例消失踩的坑
  • 电玩城游戏大厅计时软件怎么用,佳易王计时计费管理系统软件定时语音提醒操作教程
  • mineadmin 快速安装部署(docker环境)
  • Go Zero微服务个人探究之路(十六)回顾api服务和rpc服务的本质
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SQLServer之创建数据库快照
  • 初识 webpack
  • 前端学习笔记之观察者模式
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何合理的规划jvm性能调优
  • 小程序button引导用户授权
  • 自定义函数
  • !$boo在php中什么意思,php前戏
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)nsfocus-绿盟科技笔试题目
  • .bashrc在哪里,alias妙用
  • .gitignore文件---让git自动忽略指定文件
  • .gitignore文件使用
  • .NET DataGridView数据绑定说明
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework杂记
  • .Net FrameWork总结
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net反混淆脱壳工具de4dot的使用
  • .net分布式压力测试工具(Beetle.DT)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .Net语言中的StringBuilder:入门到精通
  • .NET中的Exception处理(C#)
  • /usr/bin/env: node: No such file or directory
  • @FeignClient注解,fallback和fallbackFactory
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [14]内置对象
  • [8] CUDA之向量点乘和矩阵乘法