最近项目需求做个连接Oracle的桌面程序,想用Qt来做,结果环境配置就弄了两天,记录一下。
Qt版本: Qt5.12.2
Oracle版本: 11.2.0
操作系统: window 10
Qt在安装的时候可以选择多个编译器套件,我选了mingw73_32、mingw73_64、msvc2015_64、msvc2017_64四种,另外还需要选择Source(源码)。
然后打开QtCreator,打开D:\Qt\5.12.2\Src\qtbase\src\plugins\sqldrivers\oci项目(我是装在D盘),修改oci.pro文件:
我先尝试了msvc2015_64编译,修改文件:
QMAKE_USE += oci 改为 QMAKE_LFLAGS +=oci.lib
INCLUDEPATH += E:\app\Administrator\product\11.2.0\dbhome_2\OCI\include
LIBPATH += E:\app\Administrator\product\11.2.0\dbhome_2\OCI\lib\MSVC
然后报OCIBindByPos2函数未定义错误,修改qsql_oci.cpp文件的1559行附近:
r = OCIBindByPos(
d->sql, &bindColumn.bindh, d->err, i + 1,
bindColumn.data,
bindColumn.maxLen,
bindColumn.bindAs,
bindColumn.indicators,
reinterpret_cast
0,
arrayBind ? bindColumn.maxarr_len : 0,
arrayBind ? &bindColumn.curelep : 0,
OCI_DEFAULT);
然后重新qmake,没问题,构建,找不到qtsqldrivers-config.pri,网上查了半天,什么重新下载源码,算了,换个编译器,反正编译器多。。。
我又换了mingw73_32来编译,需要修改oci.pro文件:
QMAKE_USE += oci 改为 QMAKE_LFLAGS += E:\app\Administrator\product\11.2.0\dbhome_2\BIN\oci.dll
另两行一样
然后报错,说oci.dll识别不了。
然后我又换了mingw73_64,这次没有问题,成功编译,生成了驱动,我的是生成在D:\plugins\sqldrivers目录下,将qsqloci.dll、qsqlocid.dll拷贝到D:\Qt\5.12.2\mingw73_64\plugins\sqldrivers目录,然后写代码连接数据库,在新项目的.pro文件中添加:
INCLUDEPATH += E:\app\Administrator\product\11.2.0\dbhome_2\OCI\include
然后编译运行,报错:无法运行rc.exe,将C:\Program Files (x86)\Windows Kits\10\bin\x64目录下的rc.exe、rcdll.dll拷贝到相应目录,仍然报错。。。
没关系,再换,这次用msvc2017_64,将oci.pro改回来:
QMAKE_LFLAGS +=oci.lib
编译构建成功,驱动拷贝到D:\Qt\5.12.2\msvc2017_64\plugins\sqldrivers目录,重新运行连接数据库的代码,终于成功!
前面遇到的问题应该都是可以解决的,但是时间宝贵,能满足需要就行。