我的应用程序通过Qt的QSqlDatabase类访问Oracle数据库。
我正在将Qt编译为发布版本的静态,但我似乎无法摆脱OCI.dll依赖。我正在尝试链接oci.lib(在Oracle的Instant Client中使用SDK)。
这是我的 configure 行:
configure -qt-libjpeg -qt-zlib -qt-libpng -nomake examples -nomake demos -no-exceptions -no-stl -no-rtti -no-qt3support -no-scripttools -no-openssl -no-opengl -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -static -release -opensource -plugin-sql-oci -plugin-sql-sqlite -platform win32-msvc2005
我使用以下命令链接到SDK文件夹中的oci.h和oci.lib:
set INCLUDE=C:\oracle\instantclient\sdk\include;%INCLUDE%
set LIB=C:\oracle\instantclient\sdk\lib\msvc;%LIB%
然后,编译Qt后,我在* .pro文件中使用以下行:
QT += sql
CONFIG += static
LIBS += C:\oracle\instantclient\sdk\lib\msvc\oci.lib
QTPLUGIN += qsqloci
然后,在我的 main.cpp 中,我添加以下命令以静态编译应用程序中的OCI插件:
#include <QtPlugin>
Q_IMPORT_PLUGIN(qsqloci)
编译完项目后,我在我的工作站上进行了测试,然后就可以了(因为我安装了Oracle Instant Client)。当我尝试另一个工作站时,我总是收到消息:
此应用程序无法启动 因为找不到OCI.dll。 重新安装此应用程序可能会修复 这个问题。
我不明白为什么我仍然需要OCI.dll,因为我的静态链接应用程序应该链接到oci.lib。
这里有Qt人可能有解决方案吗?
非常感谢!
STL
答案 0 :(得分:4)
您链接的.lib文件不是您认为的。它是DLL的导入库,链接器需要它,因此它知道oci.dll实现了什么功能。我没有看到Oracle提供的静态版本库,但看起来并不太难。这对于dbase接口来说非常典型。
您需要按照this document中的oci.dll,“OCI Instant Client安装流程”的部署说明进行操作。改变路径,哦,快乐。