我的应用程序通过Qt的QSqlDatabase类访问Oracle数据库。如何在编译静态时摆脱OCI.dll依赖关系
我正在编译Qt为发布版本的静态,但我似乎无法摆脱OCI.dll依赖。我试图链接到oci.lib(如Oracle的Instant Client 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即时客户端安装)。当我尝试另一个工作站上,我总是得到消息:
此应用程序未能启动 因为OCI.DLL没有被发现。 重新安装此应用程序可能会修复 此问题。
我不明白为什么我仍然需要OCI.dll,因为我的静态链接应用程序应该链接到oci.lib。
有没有Qt的人可能对我有帮助?
非常感谢!
STL
感谢您的回答! 然而,我知道查尔斯伯恩斯能够静态链接OCI插件(没有oci.dll或所以它似乎):http://www.formortals.com/how-to-statically-link-qt-4/ 如果真的没有别的方式来使用Oracle,而不是使用我的应用程序分发几个DLL,那么我会做。 – STL 2010-05-11 18:43:46
他正在谈论静态链接QT,而不是Oracle提供者。我认为大多数使用oracle的商店已经在他们的机器上安装了一个提供商。 – 2010-05-11 18:55:41
这可能就是为什么它似乎不适合我! 无论如何,它对3个DLL工作得很好,所以我想我会这样。再次感谢 ! – STL 2010-05-11 19:21:06