Russian Qt Forum
Ноябрь 24, 2024, 02:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с компиляцией OCI Plugin  (Прочитано 6327 раз)
кып
Гость
« : Июнь 11, 2009, 16:35 »

Исходные данные:
window xp sp3
qt4.5.1 MinGW - установка по умолчанию.
oracle client 10.2.0.1

Пытаюсь собрать oci plugin.
Делаю все по документации:
Код:
set INCLUDE=%INCLUDE%;D:\oracle\product\10.2.0\client_1\oci\include
set LIB=%LIB%;D:\oracle\product\10.2.0\client_1\oci\lib\msvc
cd %QTDIR%\src\plugins\sqldrivers\oci
qmake oci.pro
make
В результате выводится очень много(строк 300) непонятно чего вида:
Код:
C:/Qt/4.5.1/src/plugins/sqldrivers/oci/tmp/moc/debug_shared/moc_qsql_oci.cpp:53: undefined reference
 to `QSqlDriver::qt_metacast(char const*)'
tmp/obj/debug_shared/moc_qsql_oci.o(.text+0x17a): In function `ZN10QOCIDriver11qt_metacallEN11QMetaO
bject4CallEiPPv':
C:/Qt/4.5.1/src/plugins/sqldrivers/oci/tmp/moc/debug_shared/moc_qsql_oci.cpp:58: undefined reference
 to `QSqlDriver::qt_metacall(QMetaObject::Call, int, void**)'
tmp/obj/debug_shared/moc_qsql_oci.o(.text+0x1ad): In function `Z41__static_initialization_and_destru
ction_0ii':
C:/Qt/4.5.1/src/plugins/sqldrivers/oci/tmp/moc/debug_shared/moc_qsql_oci.cpp:41: undefined reference
 to `_imp___ZN10QSqlDriver16staticMetaObjectE'
tmp/obj/debug_shared/moc_qsql_oci.o(.rdata$_ZTV10QOCIDriver[vtable for QOCIDriver]+0x1c): In functio
n `ZSt17__verify_groupingPKcjRKSs':

и заканчивается это так
Код:
collect2: ld returned 1 exit status
mingw32-make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlocid4.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.5.1/src/plugins/sqldrivers/oci'
mingw32-make: *** [debug-all] Error 2

!!!
У меня установлено довольно много всякого софта, может что-то мешает? хотя я из путей убирал все не относящееся к делу.
А если я делаю то же самое на пустой оси(только qt и oracle client) то все работает.

Ну и собственно вопрос: Что это такое? И как это побороть?

Записан
White Owl
Гость
« Ответ #1 : Июнь 12, 2009, 17:27 »

Делаю все по документации:
Код:
set INCLUDE=%INCLUDE%;D:\oracle\product\10.2.0\client_1\oci\include
set LIB=%LIB%;D:\oracle\product\10.2.0\client_1\oci\lib\msvc
cd %QTDIR%\src\plugins\sqldrivers\oci
qmake oci.pro
make
Во первых, лучше делать:
Код:
set INCLUDE=D:\oracle\product\10.2.0\client_1\oci\include;%INCLUDE%
set LIB=D:\oracle\product\10.2.0\client_1\oci\lib\msvc;%LIB%
В этом случае ты будешь точно знать что та библиотека с которой ты сейчас работаешь будет использоваться первой. А уж чтобы точно "ничего не мешало", лучше вообще не использовать старые переменные а прописывать все целиком.



В результате выводится очень много(строк 300) непонятно чего вида:
Вместо make, сделай
Код:
make 2>err
Потом смотри в полученом err с самой первой строки. На что оно там начало ругаться. Потом смотри на команду которой делается линковка, проверь ее вручную убедись что все пути прописаны правильно.
Записан
кып
Гость
« Ответ #2 : Июнь 15, 2009, 13:12 »

Вместо make, сделай
Код:
make 2>err
Потом смотри в полученом err с самой первой строки. На что оно там начало ругаться. Потом смотри на команду которой делается линковка, проверь ее вручную убедись что все пути прописаны правильно.

С путями вроде все правильно. Что оно в err выводит мне пока ну совсем не ясно. Хотя по последнему сообщению понятно что проблема какая-то с линковкой.

За выходные проделал то-же самое на трех компах, везде все замечательно работает.
А на работе вот такая фигня. И вот попробовал еще под posgresql драйвер собрать, те же самые грабли.

Прилагаю файл с ошибками, может кто сможет мне помочь.
Записан
mbb
Гость
« Ответ #3 : Июнь 15, 2009, 15:41 »

Мне "мешал" борландовский make.exe из Дельфей, в пути был раньше. Переименовал его.
Тоже была куча жутких сообщений.
Записан
кып
Гость
« Ответ #4 : Июнь 15, 2009, 15:57 »

Мне "мешал" борландовский make.exe из Дельфей, в пути был раньше. Переименовал его.
Тоже была куча жутких сообщений.

Это я в первую очередь сделал.

А в путях у меня только C:\MinGW\bin и C:\Qt4.5.1\bin и все одно.
Я думал что с оракловым клиентом какая-то байда, а оказалось что и с постгре то-же самое.
Записан
White Owl
Гость
« Ответ #5 : Июнь 15, 2009, 18:27 »

С путями вроде все правильно.
Вот как раз с путями у тебя и проблема.
Что оно в err выводит мне пока ну совсем не ясно. Хотя по последнему сообщению понятно что проблема какая-то с линковкой.
Смотри начало списка ошибок. Первые пять строк это предупрежедния от компилятора, в данном случае их можно проигнорировать. В шестой строке уже идет сообщение от линкера - что он начинает собирать библиотеку импорта для твоей dll и при этом напоролся на следующие ошибки... и дальше идет сотня строк с ошибками. Нам более всего интересны первые строки:
Код:
  tmp/obj/debug_shared/main.o(.text+0x115): In function `ZN16QOCIDriverPluginC2Ev':
  C:/Qt/4.5.1/src/plugins/sqldrivers/oci/main.cpp:59: undefined reference to `_imp___ZN16QSqlDriverPluginC2EP7QObject'
Они означают что в модуле main есть функция QOCIDriverPlugin и в ней есть обращение к классу QSqlDriverPlugin который является потомком QObject. И линкер не смог найти модуля в котором этот класс описан. А описан он в стандартной библиотеке QtSql. Спрашивается, почему линкер не смог найти эту библиотеку?

Записан
кып
Гость
« Ответ #6 : Июнь 16, 2009, 10:26 »

[Спрашивается, почему линкер не смог найти эту библиотеку?

Если бы я знал почему он не находит ничего Грустный

Сегодня с утра еще раз попробовал, так вообще мистика какая-то началась.
Если еще вчера qmake создавал кроме make-файлов еще структуру каталогов
tmp\
     moc\
            debug_shared\
            release_shared\
     obj\
            debug_shared\
            release_shared\

то сегодня создается два каталога debug и release
а последующий запуск make не находит oci.h, хотя она никуда не делась.



 
Записан
кып
Гость
« Ответ #7 : Июнь 16, 2009, 15:56 »

Сегодня еще пробовал установить все это дела еще на двух физических компах и одном виртуальном. Все везде прекрасно собирается.
Короче плюнул я на это дело и просто скопировал библиотеки с рабочей версии.

И что-бы не заводить новую тему спрошу здесь.
А какие мои должны быть ПРАВИЛЬНЫЕ действия, чтобы сделать то-же самое под ubuntu?
Исходные данные:
Ubuntu 9.04
Qt4.5.1
Oracle 10.2.0.4 Instant client
Qt собрана с опциями по умолчанию из исходников.
oracle client установлен ручками по мануалу найденному в интернете и работает, по крайней мере sqlplus замечательно подключается.

Далее смотрю мануал о сборке плагина:
cd $QTDIR/src/plugins/sqldrivers/oci
Насколько я понимаю $QTDIR это где у меня установлена Qt (в моем случае /usr/local/Trolltech/Qt4.5.1),
но во только там у меня каталога src нету.
Пытаюсь собирать плагин из того места где сама библиотека собиралась и тут появляются такие грабли:
в файле qsql_oci.h есть такая строчка #include <QtSql/private/qsqlcachedresult_p.h>
Компилятор хочет найти этот файл там где Qt установлена, что естсественно,
но в каталоге /usr/local/Trolltech/Qt4.5.1 /include/QtSql отсутствует подкаталог private.
Что я делаю не так?

Заранее спасибо за ответ.

Записан
GrHnd
Гость
« Ответ #8 : Октябрь 02, 2009, 14:25 »

Мне "мешал" борландовский make.exe из Дельфей, в пути был раньше. Переименовал его.
Тоже была куча жутких сообщений.
А где взять нормальный make под Windows XP?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 20.