Как избавиться от зависимости OCI.dll при компиляции статики - PullRequest
2 голосов
/ 11 мая 2010

Мое приложение обращается к базе данных Oracle через класс Qt QSqlDatabase.

Я собираю 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

Я ссылаюсь на oci.h и oci.lib в папке SDK, используя:

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, у которых есть решение для меня?

Большое спасибо!

1033 * СТЛ *

1 Ответ

4 голосов
/ 11 мая 2010

.lib-файл, на который вы ссылаетесь, не тот, о котором вы думаете. Это библиотека импорта для DLL, она нужна компоновщику, чтобы он знал, какие функции реализует oci.dll. Я не вижу статической версии библиотеки, доступной от Oracle, но она не выглядела слишком сложной. Это довольно типично для интерфейсов dbase.

Вам нужно будет следовать инструкциям по развертыванию oci.dll, «Процесс установки OCI Instant Client» в этом документе . Смена пути, о радость.

...