2

私のアプリケーションは、Qt の QSqlDatabase クラスを介して Oracle データベースにアクセスします。

リリース ビルド用に Qt を静的としてコンパイルしていますが、OCI.dll の依存関係を取り除くことができないようです。oci.lib にリンクしようとしています (Oracle の Instant Client with 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.lib にリンクするはずなので、なぜ OCI.dll が必要なのかわかりません。

私にとって解決策があるかもしれないQtの人々がここにいますか?

どうもありがとう !

STL

4

1 に答える 1

5

リンクした .lib ファイルは、あなたが思っているものではありません。これは DLL のインポート ライブラリであり、oci.dll によって実装されている関数をリンカが認識できるようにするために必要です。Oracle から入手できるライブラリの静的バージョンは見当たりませんが、それほど難しくはありませんでした。これは、dbase インターフェースの典型的な例です。

oci.dll の展開手順、このドキュメントの「OCI Instant Client のインストール プロセス」に従う必要があります。PATH の変更、おお、喜びです。

于 2010-05-11T18:35:33.900 に答える