2

我的应用程序通过 Qt 的 QSqlDatabase 类访问 Oracle 数据库。

我正在将 Qt 编译为发布版本的静态版本,但我似乎无法摆脱 OCI.dll 依赖项。我正在尝试链接到 oci.lib(在 Oracle 的 Instant Client with SDK 中可用)。

这是我的配置行:

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

4

1 回答 1

5

您链接的 .lib 文件不是您认为的那样。它是 DLL 的导入库,链接器需要它,因此它知道 oci.dll 实现了哪些功能。我没有看到 Oracle 提供的库的静态版本,但看起来并不太难。这对于 dbase 接口来说是非常典型的。

您需要遵循 oci.dll 的部署说明,本文档中的“OCI 即时客户端安装过程” 。改变路径,哦,快乐。

于 2010-05-11T18:35:33.900 回答