[РЕШЕНО] Драйвер Oracle-OCI для Qt (Linux Kubuntu 9.10), Как скомпилировать драйвер oracle для Qt |
Здравствуйте, гость ( Вход | Регистрация )
[РЕШЕНО] Драйвер Oracle-OCI для Qt (Linux Kubuntu 9.10), Как скомпилировать драйвер oracle для Qt |
Oleg S. Plesser |
26.11.2009, 11:08
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 12.12.2007 Из: Московская область Пользователь №: 41 Спасибо сказали: 4 раз(а) Репутация: 0 |
скачал
qt-x11-opensource-src-4.5.3.tar.gz дальше по инструкции из qt-assistant cd $QTDIR/src/plugins/sqldrivers/oci qmake "INCLUDEPATH+=/usr/include/oracle/10.1.0.3/client" "LIBS+=-L/usr/lib/oracle/10.1.0.3/client/lib -Wl,-rpath,/usr/lib/oracle/10.1.0.3/client/lib -lclntsh -lnnz10" oci.pro make в моем случае cat $ORACLE_HOME cat: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server: Is a directory cd /home/swift/Tmp/qt-x11-opensource-src-4.5.3/src/sql/drivers/oci qmake -project (у меня нет oci.pro) qmake "INCLUDEPATH+=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server" "LIBS+=-L/usr/lib/oracle/xe/app/oracle/product/10.2.0/server -Wl,-rpath,/usr/lib/oracle/10.1.0.3/client/lib -lclntsh -lnnz10" oci.pro (у меня стоит oracle XE) ------ прописал в make include исходников -I/home/swift/Tmp/qt-x11-opensource-src-4.5.3/include ------ make и получаю g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/home/swift/Tmp/qt-x11-opensource-src-4.5.3/include/QtSql -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/lib/oracle/xe/app/oracle/product/10.2.0/server -I. -I. -o qsql_oci.o qsql_oci.cpp In file included from qsql_oci.cpp:42: qsql_oci.h:47:46: error: QtSql/private/qsqlcachedresult_p.h: No such file or directory qsql_oci.cpp:59:17: error: oci.h: No such file or directory In file included from qsql_oci.cpp:42: qsql_oci.h:68: error: expected class-name before ‘{’ token qsql_oci.h:80: error: ‘ValueCache’ has not been declared qsql_oci.cpp:80: error: ‘OCIStmt’ was not declared in this scope qsql_oci.cpp:80: error: template argument 1 is invalid qsql_oci.cpp:90: error: ‘ub1’ does not name a type qsql_oci.cpp:91: error: ‘ub2’ does not name a type qsql_oci.cpp:93: error: ‘sb2’ was not declared in this scope qsql_oci.cpp:93: error: template argument 1 is invalid ****************** конечно можно начать шаманить и править ссылки на header файлы но что то мне подсказывает что можно как то более просто решить сей проблему.... вопрос как? |
|
|
iddqd |
26.11.2009, 12:03
Сообщение
#2
|
Студент Группа: Участник Сообщений: 32 Регистрация: 26.11.2009 Пользователь №: 1261 Спасибо сказали: 1 раз(а) Репутация: 0 |
cd /home/swift/Tmp/qt-x11-opensource-src-4.5.3/src/sql/drivers/oci qmake -project (у меня нет oci.pro) oci.pro там и не должно быть, он должен лежать (по аналогии с версией под win32) в папке cd /home/swift/Tmp/qt-x11-opensource-src-4.5.3/src/plugins/sqldrivers/oci |
|
|
Oleg S. Plesser |
26.11.2009, 12:50
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 12.12.2007 Из: Московская область Пользователь №: 41 Спасибо сказали: 4 раз(а) Репутация: 0 |
cd /home/swift/Tmp/qt-x11-opensource-src-4.5.3/src/sql/drivers/oci qmake -project (у меня нет oci.pro) oci.pro там и не должно быть, он должен лежать (по аналогии с версией под win32) в папке cd /home/swift/Tmp/qt-x11-opensource-src-4.5.3/src/plugins/sqldrivers/oci эээ кхм ок поехали по этому пути создаю makefile прописываю в нем -I/home/swift/Tmp/qt-x11-opensource-src-4.5.3/include make g++ -c -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_SHARED -I/home/swift/Tmp/qt-x11-opensource-src-4.5.3/include -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtSql -I/usr/include/qt4 -I/usr/lib/oracle/xe/app/oracle/product/10.2.0/server -I. -o main.o main.cpp g++ -c -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -D_REENTRANT -Wall -W -fPIC -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_SHARED -I/home/swift/Tmp/qt-x11-opensource-src-4.5.3/include -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtSql -I/usr/include/qt4 -I/usr/lib/oracle/xe/app/oracle/product/10.2.0/server -I. -o qsql_oci.o ../../../sql/drivers/oci/qsql_oci.cpp ../../../sql/drivers/oci/qsql_oci.cpp:59:17: error: oci.h: No such file or directory ../../../sql/drivers/oci/qsql_oci.cpp:80: error: ‘OCIStmt’ was not declared in this scope ../../../sql/drivers/oci/qsql_oci.cpp:80: error: template argument 1 is invalid ../../../sql/drivers/oci/qsql_oci.cpp:90: error: ‘ub1’ does not name a type ../../../sql/drivers/oci/qsql_oci.cpp:91: error: ‘ub2’ does not name a type ../../../sql/drivers/oci/qsql_oci.cpp:93: error: ‘sb2’ was not declared in this scope ../../../sql/drivers/oci/qsql_oci.cpp:93: error: template argument 1 is invalid ************************************************************ и |
|
|
Oleg S. Plesser |
26.11.2009, 14:01
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 12.12.2007 Из: Московская область Пользователь №: 41 Спасибо сказали: 4 раз(а) Репутация: 0 |
так
собрал файл libqsqloci.so кинул в /usr/lib/qt4/plugins/sqldrivers а что делать дальше? QSqlDatabase: QOCI driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL3 QMYSQL QODBC3 QODBC |
|
|
iddqd |
26.11.2009, 14:17
Сообщение
#5
|
Студент Группа: Участник Сообщений: 32 Регистрация: 26.11.2009 Пользователь №: 1261 Спасибо сказали: 1 раз(а) Репутация: 0 |
|
|
|
Litkevich Yuriy |
26.11.2009, 14:23
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Oleg S. Plesser |
26.11.2009, 14:26
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 12.12.2007 Из: Московская область Пользователь №: 41 Спасибо сказали: 4 раз(а) Репутация: 0 |
файл libqsqloci.so по идее руками ничего копировать не надо, на Никсах видимо нужно ещё сделать make install (на видах больше никаких тело движений не нужно)кинул в /usr/lib/qt4/plugins/sqldrivers а что делать дальше? те же яйца вид сбоку :-/ |
|
|
Oleg S. Plesser |
26.11.2009, 15:27
Сообщение
#8
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 12.12.2007 Из: Московская область Пользователь №: 41 Спасибо сказали: 4 раз(а) Репутация: 0 |
файл libqsqloci.so по идее руками ничего копировать не надо, на Никсах видимо нужно ещё сделать make install (на видах больше никаких тело движений не нужно)кинул в /usr/lib/qt4/plugins/sqldrivers а что делать дальше? те же яйца вид сбоку :-/ сделано надо было ldconfig запустить после инсталяции |
|
|
Litkevich Yuriy |
26.11.2009, 16:24
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Oleg S. Plesser, можешь теперь по шагам описать, в стиле " делаем раз, делаем два,..."?
Чтобы тему закрыть |
|
|
Oleg S. Plesser |
26.11.2009, 18:10
Сообщение
#10
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 12.12.2007 Из: Московская область Пользователь №: 41 Спасибо сказали: 4 раз(а) Репутация: 0 |
Oleg S. Plesser, можешь теперь по шагам описать, в стиле " делаем раз, делаем два,..."? Чтобы тему закрыть обязательно распишу у меня в планах сие значится завтра сделаю!!! Дано: Kubuntu 9.10 (версия kubuntu в данном случае не принципиально) с установленным комплектом разработчика по Qt и Oracle Express Edition из репозитариев. Задача: установить соединение из Qt программы с базой данных. Решение По какой то причине в репозитарии нету скомпилированного драйвера под Oracle, но исходники самого sql драйвера доступны в исходниках Qt. Для начала нам необходимо скачать Instant Client Oracle http://www.oracle.com/technology/software/.../linuxsoft.html Обратите внимание что если у вас стоит Oracle Express Edition то вам необходимы файлы из ветки 10.2 Скачиваете архив разархивруете его и идете по следующему пути(адресу) /home/swift/Tmp/instantclient_10_2/sdk Вас интересует содержимое директории include с правами root создаете директорию /usr/include/oracle/10.2 и копируете в нее содержимое сей папки Далее идем на сайт http://qt.nokia.com/downloads/linux-x11-cpp И качаем оттуда исходники Qt. (В репозитарии Kubuntu доступна версия Qt 4.5.2, на сайте по умолчанию предлагается скачать 4.5.3, что впринципе не принципиально, если Вы хотите скачать исходники именно Qt 4.5.2 просто в ссылке меняете одну циферку и тем же wget спокойно ее качаете) В моем случае я скачал ее по адресу /home/swift/Tmp разархивруем архив и идем по следующему пути(адресу) /home/swift/Tmp/qt-x11-opensource-src-4.5.2/src/plugins/sqldrivers/oci Там должно быть три файла README main.cpp oci.pro Там выполняем следующующую команду qmake "INCLUDEPATH+=/usr/include/oracle/10.2/" "LIBS+=-L//usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/ -Wl,-rpath,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/ -lclntsh -lnnz10" oci.pro Обратите внимание на пути, они должны соотвествовать пути где у вас установлен Oracle XE Выполняем команду и получаем файл Makefile Заходим в него и находим строчку которая начинается с INCPATH Наша задача указать что лежат заголовочные файлы входящие в исходники. В моем случае это вылилось в добавление туда следующей строки -I/home/swift/Tmp/qt-x11-opensource-src-4.5.2/include Сохраняем файл и запускаем сначало make затем make install (эту команду необходимо запускать с правами root) Затем необходимо переписать hash динамических библиотек. Это делается с помощью команды ldconfig. Ну и теперь тестируем саму программу #include <QtGui> #include <QtSql> int main(int argc, char **argv) { QApplication a(argc,argv); QMainWindow mainwin; .... QSqlDatabase db; db.addDatabase("QOCI"); db.setDatabaseName("XE"); db.setUserName("system"); db.setPassword("secret_word"); .............. mainwin.show(); return a.exec(); } программа компилится стандартно qmake -project qmake make |
|
|
Текстовая версия | Сейчас: 28.11.2024, 19:20 |