Russian Qt Forum

Qt => Базы данных => Тема начата: michael_ky от Ноябрь 30, 2011, 00:07



Название: [+]не собирается sql driver : QOCI
Отправлено: michael_ky от Ноябрь 30, 2011, 00:07
Делал по поиску, по инструкциям, докам.
Получил makefile-ы.
mingw32-make выплевывает ld.exe : cannot find -loci
Если кто с подобным сталкивался, прошу помогите.
Подробную информацию оформлю чуть позже.
Заранее спасибо.


Название: Re: не собирается sql driver : QOCI
Отправлено: Пантер от Ноябрь 30, 2011, 07:30
Оракловская либа доступна? Покажи как конфигурил и собирал.


Название: не собирается sql driver : QOCI
Отправлено: michael_ky от Ноябрь 30, 2011, 12:45
Цитировать
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Michael>set INCLUDE=C:\Oracle\product\11.2.0\client_xe\oci\include;%INC
LUDE%

C:\Users\Michael>set LIB=C:\Oracle\product\11.2.0\client_xe\oci\lib\msvc;%LIB%

C:\Users\Michael>set PATH=%PATH%;C:\Qt\MinGW\bin;C:\Qt\Desktop\Qt\4.7.4\mingw\bi
n

C:\Users\Michael>path
PATH=C:\Oracle\product\11.2.0\client_xe\bin;C:\Oracle\Express11g\app\oracle\prod
uct\11.2.0\server\bin;;C:\Program Files\Common Files\Microsoft Shared\Windows Li
ve;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:
\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:
\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Micro
soft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Bi
nn\;C:\Oracle\product\11.2.0\client_xe\BIN;C:\Qt\MinGW\bin;C:\Qt\Desktop\Qt\4.7.
4\mingw\bin

C:\Users\Michael>cd C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci

C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci>qmake -o Makefile oci.pro

После qmake добавил -I"C:\Oracle\...\include" в makefile.debug и .release

C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci>mingw32-make debug
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Qt/QtSources/4.7.4/src/plugins/sqldriver
s/oci'
g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlocid4.a -o debug\qsqlocid4.d
ll debug/main.o debug/qsql_oci.o debug/moc_qsql_oci.o  -L"c:\Qt\Desktop\Qt\4.7.4
\mingw\lib" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4
c:/qt/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/bin/ld.exe: cannot find -loci
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\qsqlocid4.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/QtSources/4.7.4/src/plugins/sqldrivers/oci'
mingw32-make: *** [debug] Error 2
Руководствовался этим (http://developer.qt.nokia.com/forums/viewthread/6411). В теме даже был пост про мою проблему, решением было якобы OCI.dll path was missing in environment variable. Копировал всевозможными способами, добавлял в переменные среды, эффекта не возымело. Хотя скорее всего что-то не так понял...


Название: Re: не собирается sql driver : QOCI
Отправлено: Пантер от Ноябрь 30, 2011, 13:03
Там для msvc рассказано, а у тебя mingw.


Название: Re: не собирается sql driver : QOCI
Отправлено: michael_ky от Ноябрь 30, 2011, 13:31
Цитата: qt.nokia.com
How to Build the OCI Plugin on Windows

Choosing the option "Programmer" in the Oracle Client Installer from the Oracle Client Installation CD is generally sufficient to build the plugin. For some versions of Oracle Client, you may also need to select the "Call Interface (OCI)" option if it is available.

Build the plugin as follows (here it is assumed that Oracle Client is installed in C:\oracle):

 
Цитировать
set INCLUDE=%INCLUDE%;c:\oracle\oci\include
set LIB=%LIB%;c:\oracle\oci\lib\msvc
cd %QTDIR%\src\plugins\sqldrivers\oci
qmake oci.pro
nmake

If you are not using a Microsoft compiler, replace nmake with make in the line above.

When you run your application you will also need to add the oci.dll path to your PATH environment variable:

Цитировать
set PATH=%PATH%;c:\oracle\bin
Я пытался собрать nmake-ом, но тот отсылался на g++ и результат был аналогичен. Позже где-то вычитал, что так не должно происходить, потому и остановился на mingw32-make.


Название: Re: не собирается sql driver : QOCI
Отправлено: Пантер от Ноябрь 30, 2011, 13:44
set LIB=C:\Oracle\product\11.2.0\client_xe\oci\lib\msvc;%LIB%
Ты пытаешься мингвом прилинковать студийную либу.


Название: Re: не собирается sql driver : QOCI
Отправлено: michael_ky от Ноябрь 30, 2011, 13:58
Цитировать
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Windows\system32>set INCLUDE=C:\Oracle\product\11.2.0\client_xe\oci\include;%
INCLUDE%

C:\Windows\system32>set LIB=C:\Oracle\product\11.2.0\client_xe\oci\lib\msvc;%LIB
%

C:\Windows\system32>set PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0
\VC\bin;%PATH%

C:\Windows\system32>cd C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci

C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci>nmake

Служебная программа обслуживания программ Microsoft (R), версия 10.00.30319.01
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

        "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\nmake.exe" -
f Makefile.Debug

Служебная программа обслуживания программ Microsoft (R), версия 10.00.30319.01
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

        g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlocid4.a -o debug\qsq
locid4.dll debug/main.o  debug/qsql_oci.o  debug/moc_qsql_oci.o  -L"c:\Qt\Deskto
p\Qt\4.7.4\mingw\lib" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4
"g++" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
NMAKE : fatal error U1077: g++ : возвращенный код "0x1"
Stop.
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\
VC\bin\nmake.exe" : возвращенный код "0x2"
Stop.

C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci>set PATH=C:\Qt\MinGW\bin;%PATH%


C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci>nmake

Служебная программа обслуживания программ Microsoft (R), версия 10.00.30319.01
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

        "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\nmake.exe" -
f Makefile.Debug

Служебная программа обслуживания программ Microsoft (R), версия 10.00.30319.01
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

        g++ -mthreads -shared -Wl,--out-implib,debug\libqsqlocid4.a -o debug\qsq
locid4.dll debug/main.o  debug/qsql_oci.o  debug/moc_qsql_oci.o  -L"c:\Qt\Deskto
p\Qt\4.7.4\mingw\lib" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4
c:/qt/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/bin/ld.exe: cannot
find -loci
collect2: ld returned 1 exit status
NMAKE : fatal error U1077: C:\Qt\MinGW\bin\g++.EXE : возвращенный код "0x1"
Stop.
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\
VC\bin\nmake.exe" : возвращенный код "0x2"
Stop.

C:\Qt\QtSources\4.7.4\src\plugins\sqldrivers\oci>
Стоит Win SDK : VC 9,10.


Название: Re: не собирается sql driver : QOCI
Отправлено: michael_ky от Ноябрь 30, 2011, 14:18
Оказывается иногда фантастика становится реальностью.
В Makefile.debug обратил внимание на строчку :
Код:
LIBS        =        -L"c:\Qt\Desktop\Qt\4.7.4\mingw\lib" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4
Добавил -L"path_to_oracle\BIN" . Получилось
Код:
LIBS        =        -L"c:\Qt\Desktop\Qt\4.7.4\mingw\lib" -L"C:\Oracle\product\11.2.0\client_xe\BIN" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4
После чего собрал nmake-ом, который выплюнул мне нужную .dll и .a
Осталось узнать работоспособны ли они.

UPD.
В Makefile.release добавил аналогично с debug путь до BIN и
Код:
INCPATH       = -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtCore" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtSql" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include\ActiveQt" -I"release" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\mkspecs\default"
Добавил -I"C:\Oracle\product\11.2.0\client_xe\oci\include"
Код:
INCPATH       = -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtCore" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include\QtSql" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\include\ActiveQt" -I"release" -I"c:\Qt\Desktop\Qt\4.7.4\mingw\mkspecs\default" -I"C:\Oracle\product\11.2.0\client_xe\oci\include"
Хотя бы собралось.


Название: Re: не собирается sql driver : QOCI
Отправлено: michael_ky от Ноябрь 30, 2011, 14:40
Вроде как работают. Спасибо за помощь.