Ошибка установки пакета ROracle

Мне известны другие вопросы по этой проблеме, но они не имеют ничего общего с моей настройкой системы или ошибкой установки, которую я получаю, поэтому:

Я использую Windows 7, 64 бит

Я установил 64-битный Oracle Instant Client 18.3.0.0.0 вместе с его расширениями sdk и odbc, доступными по http://www.oracle.com/technetwork/topics/winx64soft-089540.html

Я поместил место установки `C:\Oracle\instantclient_18_3'в PATH.

Я установил R 3.5.1 и Rtools 3.5; оба находятся на ПУТИ.

В R,

Sys.setenv(
  'ORACLE_HOME' = 'C:/Oracle/instantclient_18_3',
  'OCI_INC'     = 'C:/Oracle/instantclient_18_3/sdk/include',
  'OCI_LIB64'   = 'C:/Oracle/instantclient_18_3'
  )
install.packages("ROracle", type="source")

приводит к следующему

* installing *source* package 'ROracle' ...
** package 'ROracle' successfully unpacked and MD5 sums checked
Oracle Client Shared Library 64-bit - 18.3.0.0.0 Operating in Instant Client mode.
found Oracle Client C:/Oracle/instantclient_18_3
found Oracle Client include C:/Oracle/instantclient_18_3/sdk/include
copying from C:/Oracle/instantclient_18_3/sdk/include
** libs
c:/Rtools/mingw_64/bin/gcc  -I"C:/Program Files/R/R-3.5.1/include" -DNDEBUG -I./oci         -O2 -Wall  -std=gnu99 -mtune=generic -c rodbi.c -o rodbi.o
In file included from rooci.h:75:0,
                 from rodbi.c:181:
./oci/oci.h:716:20: fatal error: ociver.h: No such file or directory
 #include <ociver.h>
                    ^
compilation terminated.
make: *** [C:/Program Files/R/R-3.5.1/etc/x64/Makeconf:208: rodbi.o] Error 1
ERROR: compilation failed for package 'ROracle'
* removing 'C:/Users/obrienle/Documents/R/win-library/3.5/ROracle'
In R CMD INSTALL
Warning in install.packages :
  installation of package ‘ROracle’ had non-zero exit status

Файл ociver.h, который Rtools не может найти, определенно присутствует в OCI_INC папка, поэтому я не знаю, почему это происходит. У кого-нибудь есть идеи о том, что попробовать?

4 ответа

Решение

У меня была точно такая же проблема:

c:/Rtools/mingw_64/bin/gcc  -I"C:/PROGRA~1/R/R-35~1.1/include" -DNDEBUG -I./oci         -O2 -Wall  -std=gnu99 -mtune=generic -c rodbi.c -o rodbi.o
In file included from rooci.h:75:0,
                 from rodbi.c:181:
./oci/oci.h:716:20: fatal error: ociver.h: No such file or directory
 #include <ociver.h>
                    ^
compilation terminated.

Как только я посмотрел намного ближе к ошибке, я понял, что происходит. Мне показалось, что аргументы для Rtools устанавливают -I для папки включения R, а не для папки включения OCI, и угадайте, чего нет в папке включения R? Это верно, ociver.h. Я считаю, что R пытается скопировать содержимое папки включения OCI в папку включения R из-за этой строки на несколько строк выше ошибки:

copying from C:\Oracle\instantclient_18_3\sdk\include\

и не работает, может быть, как администратор поможет? Или, возможно, редактирование разрешений папки?

В любом случае, я вручную скопировал содержимое папки oracle include в папку R include, и это, похоже, решило проблему для меня.

Спасибо Эрику за его ответ, он определенно работает! Но, похоже, проблема в самом пакете, а не в том, что R пытается скопировать включаемые файлы в папку include R. Таким образом, альтернативное решение заключается в

  • Распакуйте исходный архив, чтобы ROracle папка в вашем текущем каталоге
  • Редактировать файл ROracle/configure.win и добавьте следующую строку в конец файла

    cp ${ROCI_INC}/ociver.h ./src/oci

  • Сохраните и закройте файл. Теперь в вашем текущем каталоге выполните команду установки в папке обновленного пакета

    R CMD INSTALL ROracle

Это должно решить проблему. Я не уверен, что разработчики забыли включить эту строку в configure.win или это происходит только с более новыми версиями R, поскольку пакет не обновлялся с 2016 года, и в документах упоминается, что ROracle поддерживает Версии R до 3.2.

Я опубликовал разветвленный репозиторий ROracle 1.3 , который исправляет две ошибки сборки в Windows:

  1. Исправляет отсутствующий файл ociver.h, как предложил Эрик Моффитт.
  2. Заключает в кавычки пути к файлам для каталога клиента Oracle, что устраняет ошибки, если пути содержат пробелы.

Чтобы использовать его вместо репозитория CRAN, просто запустите

      devtools::install_github('andrew-schulman/ROracle')

Я использую 4.02. Я обнаружил, что новейший пакет ROracle на веб-сайте Oracle работает с InstantClient и установкой Sys.setenv, описанной выше.

Спасибо за продолжение mirkohosro.

Другие вопросы по тегам