Файлы заголовков не найдены при создании драйвера Oci в Qt

Я скомпилировал драйвер Oracle Oci в соответствии с инструкциями для Windows, приведенными в http://doc.qt.digia.com/4.7-snapshot/sql-driver.html#general-information-about-the-oci-plugin

Все идет хорошо до последнего шага, в котором я заменяю nmake на mingw32-make. Я понял.

mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/QtSDK/QtSources/4.7.4/src/sql/drivers/oci'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -
DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\QtSDK\
Desktop\Qt\4.7.4\mingw\include\QtCore" -I"c:\QtSDK\Desktop\Qt\4.7.4\mingw\includ
e\QtGui" -I"c:\QtSDK\Desktop\Qt\4.7.4\mingw\include" -I"c:\QtSDK\Desktop\Qt\4.7.
4\mingw\include\ActiveQt" -I"debug" -I"c:\QtSDK\Desktop\Qt\4.7.4\mingw\mkspecs\d
efault" -o debug\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 dir
ectory
qsql_oci.cpp:50:23: error: qsqlerror.h: No such file or directory
qsql_oci.cpp:51:23: error: qsqlfield.h: No such file or directory
qsql_oci.cpp:52:23: error: qsqlindex.h: No such file or directory
qsql_oci.cpp:53:23: error: qsqlquery.h: No such file or directory
qsql_oci.cpp:65:17: error: oci.h: No such file or directory

за которыми следует много ошибок, но я думаю, что все они связаны с невозможностью найти заголовочные файлы. Может ли кто-нибудь сказать мне, почему это происходит? Я правильно указал все пути к INCLUDE и LIB, как указано в первых двух шагах.

Обновление:
Я изменил файл .pro, созданный qmake -project, и добавил QT+= sql, и все ошибки заголовка, связанные с sql, исчезли, но первая qsqlcachedresult_p.h и последняя oci.h остались.


person Airmine    schedule 22.09.2012    source источник
comment
Где на самом деле находится qsqlerror.h в вашей системе? Я предполагаю, что не в путях, переданных g++ в параметрах -I, и это вероятная причина ошибки.   -  person Jarekczek    schedule 22.09.2012
comment
Я проверил. Все мои заголовки находятся по адресу c:\QtSDK\Desktop\Qt\4.7.4\mingw\include. И это включено в аргументы g++/   -  person Airmine    schedule 23.09.2012


Ответы (2)


Попробуйте также добавить параметры include\QtSql в -I. Я точно не знаю, как это сделать в этой среде, но, возможно,

set CPP_FLAGS="-Ic:\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtSql"

до того, как сработает команда make.

person Jarekczek    schedule 24.09.2012
comment
Я изменил файл .pro, но две другие ошибки остались. Обновил мой вопрос. Спасибо! - person Airmine; 24.09.2012
comment
Я понимаю. Итак, 2 файла все еще не разрешены. Может они ожидали другую версию qt? С oci.h это должно быть довольно просто, просто добавьте еще один каталог -I. Но если пути QtSql/private/qsqlcachedresult_p.h нет, то компиляция сейчас может быть невозможна. В любом случае здесь нужен кто-то с лучшим знанием QT. - person Jarekczek; 25.09.2012

Чтобы решить оставшиеся две проблемы с заголовком, вот что я сделал:

  1. Для файла oci.h отредактируйте makefile.release и makefile.debug вручную, включив путь к заголовку в переменную INCPATH. (Что-то вроде -I"C:\XEClient\oci\include").

  2. qsqlcachedresult_p.h находился в каталоге QT/src/sql/kernel. Поэтому я скопировал файл заголовка в новый каталог C:\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtSql\private.

После этого компилируется без ошибок.

Этот пост очень помог - http://www.qtcentre.org/threads/41904-Oracle-Call-Interface-(OCI)-driver-problems.

person Airmine    schedule 25.09.2012