Компиляция OCI-плагина под Win7 |
Здравствуйте, гость ( Вход | Регистрация )
Компиляция OCI-плагина под Win7 |
bayah |
2.3.2013, 11:11
Сообщение
#1
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Из Qt-приложения хочу подключиться к базе Oracle.
Для этго мне нужен OCI драйвер. Но "Из-за несовместимости с GPL лицензией, не все плагины поставляются с Qt Open Source Edition." Короче плагин нужно скомпилить. Делаю по этой инструкции: http://doc.crossplatform.ru/qt/4.3.2/sql-d...l-interface-oci Нашел какой-то qmake - их почему-то в каталоге qt много разных Что-то собралось но nmake у меня нет nmake это я так понимаю сборщик от MVC? Короче следующие вопросы: 1. Обязательно ли собирать nmake-ом, если у меня win7, и для чего тогда mingw? 2. Где взять nmake? Ставить MVC? Все. Спасибо заранее. |
|
|
ilyabvt |
2.3.2013, 16:19
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
По ссылке написано:
Цитата Если вы используете компилятор не от Microsoft, замените nmake на make.
|
|
|
bayah |
4.3.2013, 8:02
Сообщение
#3
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
Делаю так:
C:\oracle\product\10.2.0\client_1 - тут у меня стоит клиент Oracle(Programmer) QTDIR = C:\QtSDK\QtSources\4.8.1 в результате получаю: ошибка Цитата C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\oci>C:\QtSDK\Symbian\tools\sbs\w in32\mingw\bin\make C:/QtSDK/Symbian/tools/sbs/win32/mingw/bin/make -f Makefile.Debug make[1]: Entering directory `C:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/oci ' g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT - DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB - DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_H AVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtSql" -I"c:\QtSDK\Desktop\Qt\4.8.1\m ingw\include" -I"c:\Orant\client_2\oci\include" -I"." -I"..\..\..\sql\kernel" -I "..\..\..\sql\drivers\oci" -I"c:\oracle\product\10.2.0\client_1\oci\include" -I" ..\..\..\sql\drivers\oci" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\ActiveQt" - I"debug" -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\mkspecs\default" -o debug\qsql_oci.o ..\..\..\sql\drivers\oci\qsql_oci.cpp ..\..\..\sql\drivers\oci\qsql_oci.cpp:65:17: error: oci.h: No such file or direc tory ..\..\..\sql\drivers\oci\qsql_oci.cpp:86: error: 'OCIStmt' was not declared in t his scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:86: error: template argument 1 is invalid ..\..\..\sql\drivers\oci\qsql_oci.cpp:107: error: 'ub2' does not name a type ..\..\..\sql\drivers\oci\qsql_oci.cpp:110: error: 'sb2' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:110: error: template argument 1 is invalid ..\..\..\sql\drivers\oci\qsql_oci.cpp:110: error: invalid type in declaration be fore ';' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:111: error: 'ub2' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:111: error: template argument 1 is invalid ..\..\..\sql\drivers\oci\qsql_oci.cpp:111: error: invalid type in declaration be fore ';' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:116: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:117: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:119: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:120: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:122: error: 'OCIError' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:122: error: 'err' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:122: error: expected primary-expression be fore 'int' ..\..\..\sql\drivers\oci\qsql_oci.cpp:127: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:128: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:138: error: ISO C++ forbids declaration of 'OCIRowid' with no type ..\..\..\sql\drivers\oci\qsql_oci.cpp:138: error: expected ';' before '*' token ..\..\..\sql\drivers\oci\qsql_oci.cpp: In constructor 'QOCIRowId::QOCIRowId(OCIE nv*)': ..\..\..\sql\drivers\oci\qsql_oci.cpp:145: error: class 'QOCIRowId' does not hav e any field named 'id' ..\..\..\sql\drivers\oci\qsql_oci.cpp:147: error: expected type-specifier before 'dvoid' ..\..\..\sql\drivers\oci\qsql_oci.cpp:147: error: expected '>' before 'dvoid' ..\..\..\sql\drivers\oci\qsql_oci.cpp:147: error: expected '(' before 'dvoid' ..\..\..\sql\drivers\oci\qsql_oci.cpp:147: error: 'dvoid' was not declared in th is scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:147: error: expected primary-expression be fore '>' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:147: error: 'id' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:148: error: 'OCI_DTYPE_ROWID' was not decl ared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp: In destructor 'QOCIRowId::~QOCIRowId()': ..\..\..\sql\drivers\oci\qsql_oci.cpp:153: error: 'id' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:154: error: 'OCI_DTYPE_ROWID' was not decl ared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:154: error: 'OCIDescriptorFree' was not de clared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp: At global scope: ..\..\..\sql\drivers\oci\qsql_oci.cpp:172: error: ISO C++ forbids declaration of 'OCIError' with no type ..\..\..\sql\drivers\oci\qsql_oci.cpp:172: error: expected ';' before '*' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:174: error: ISO C++ forbids declaration of 'OCIStmt' with no type ..\..\..\sql\drivers\oci\qsql_oci.cpp:174: error: expected ';' before '*' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:180: error: 'OCIStmt' has not been declare d ..\..\..\sql\drivers\oci\qsql_oci.cpp:180: error: 'OCIBind' has not been declare d ..\..\..\sql\drivers\oci\qsql_oci.cpp:180: error: 'OCIError' has not been declar ed ..\..\..\sql\drivers\oci\qsql_oci.cpp:181: error: 'dvoid' has not been declared ..\..\..\sql\drivers\oci\qsql_oci.cpp:181: error: 'ub2' has not been declared ..\..\..\sql\drivers\oci\qsql_oci.cpp:191: error: 'dvoid' has not been declared ..\..\..\sql\drivers\oci\qsql_oci.cpp:191: error: 'ub4' has not been declared ..\..\..\sql\drivers\oci\qsql_oci.cpp: In member function 'void QOCIResultPrivat e::setCharset(int*, int) const': ..\..\..\sql\drivers\oci\qsql_oci.cpp:217: error: 'qOraCharset' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:219: error: 'OCI_ATTR_CHARSET_ID' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:220: error: 'err' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:220: error: 'OCIAttrSet' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp: In member function 'void QOCIResultPrivat e::setStatementAttributes()': ..\..\..\sql\drivers\oci\qsql_oci.cpp:229: error: 'sql' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:235: error: 'OCI_HTYPE_STMT' was not decla red in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:238: error: 'OCI_ATTR_PREFETCH_ROWS' was n ot declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:239: error: 'err' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:239: error: 'OCIAttrSet' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:246: error: 'OCI_HTYPE_STMT' was not decla red in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:249: error: 'OCI_ATTR_PREFETCH_MEMORY' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:250: error: 'err' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:250: error: 'OCIAttrSet' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp: At global scope: ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'int QOCIResultPrivate::bindVa lue' is not a static member of 'struct QOCIResultPrivate' ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'OCIStmt' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'sql' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'OCIBind' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'hbnd' was not declared in thi s scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'OCIError' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: 'err' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:257: error: expected primary-expression be fore 'int' ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: expected primary-expression be fore 'const' ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: 'dvoid' was not declared in th is scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: 'indPtr' was not declared in t his scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: 'ub2' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: 'tmpSize' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: expected primary-expression be fore '&' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: 'tmpStorage' was not declared in this scope ..\..\..\sql\drivers\oci\qsql_oci.cpp:258: error: initializer expression list tr eated as compound expression ..\..\..\sql\drivers\oci\qsql_oci.cpp:259: error: expected ',' or ';' before '{' token ..\..\..\sql\drivers\oci\qsql_oci.cpp:113: warning: 'QByteArray qMakeOraDate(con st QDateTime&)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:114: warning: 'QDateTime qMakeDate(const c har*)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:116: warning: 'QByteArray qMakeOCINumber(c onst qlonglong&, int*)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:117: warning: 'QByteArray qMakeOCINumber(c onst qulonglong&, int*)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:119: warning: 'qlonglong qMakeLongLong(con st char*, int*)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:120: warning: 'qulonglong qMakeULongLong(c onst char*, int*)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:127: warning: 'void qOraWarning(const char *, int*)' declared 'static' but never defined ..\..\..\sql\drivers\oci\qsql_oci.cpp:128: warning: 'QSqlError qMakeError(const QString&, QSqlError::ErrorType, int*)' declared 'static' but never defined make[1]: *** [debug/qsql_oci.o] Error 1 make[1]: Leaving directory `C:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/oci' make: *** [debug] Error 2 Этого файла - oci.h - нигде не могу найти. Что делаю не так? Сообщение отредактировал ViGOur - 8.3.2013, 22:53
Причина редактирования: Учимся пользоваться тегами форума как QUOTE так и EXPAND для больших кусков...
|
|
|
Алексей1153 |
4.3.2013, 8:24
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
bayah |
4.3.2013, 16:17
Сообщение
#5
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
У меня не оказалось oci.h вообще в той версии Oraclce клиента, что я поставил(Oracle Cleint 10g)
Переделал как написано тут: http://stackoverflow.com/questions/1254550...ci-driver-in-qt Поставил Oracle Client 10g Express и прописал соответствующие пути. Пеперь сборка выглядит так:
Теперь вот что пишет: C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\oci>C:\QtSDK\Symbian\tools\sbs\w in32\mingw\bin\make.exe C:/QtSDK/Symbian/tools/sbs/win32/mingw/bin/make -f Makefile.Debug make[1]: Entering directory `C:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/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:\QtSDK\Desktop\Qt\4. 8.1\mingw\lib" debug\qsqlocid_resource_res.o -LC:\XEClient\oci\lib\msvc C:\QtSDK \QtSources\4.8.1\src\sql\drivers\oci -loci -lQtSqld4 -lQtCored4 c:/qtsdk/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: C:\Q tSDK\QtSources\4.8.1\src\sql\drivers\oci: No such file: Permission denied collect2: ld returned 1 exit status make[1]: *** [debug\qsqlocid4.dll] Error 1 make[1]: Leaving directory `C:/QtSDK/QtSources/4.8.1/src/plugins/sqldrivers/oci' make: *** [debug] Error 2 Что с этим делать? |
|
|
Алексей1153 |
4.3.2013, 18:49
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
bayah |
5.3.2013, 1:52
Сообщение
#7
|
Студент Группа: Участник Сообщений: 31 Регистрация: 23.11.2009 Пользователь №: 1249 Спасибо сказали: 0 раз(а) Репутация: 0 |
не ну так-то уж не надо)
я гуглом еще умею немного пользоваться эту проблему решил уже вот таким способом, как тут: http://www.forum.crossplatform.ru/index.php?showtopic=3841 - добавил -L в строку: LIBS+=-Lc:\oracle9\oci\lib\msvc Плагин вроде собрался - ошибок не выдал. Но теперь пробую подключиться к базе: #include <QtCore/QCoreApplication> #include <QtSql> .pro
.cpp
Выдает вот что: QSqlDatabase: QOCI driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC Почему не находится драйвер? |
|
|
Алексей1153 |
6.3.2013, 6:57
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
поройся вот в этом разделе
http://www.forum.crossplatform.ru/index.php?showforum=34 например, вот тут уже встречается описание, как собрать и где расположить нужный плагин. Они все аналогично делаются. http://www.forum.crossplatform.ru/index.php?showtopic=5267 |
|
|
ViGOur |
8.3.2013, 22:56
Сообщение
#9
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
Текстовая версия | Сейчас: 28.11.2024, 15:47 |