Ошибка установки пакета 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:
- Исправляет отсутствующий файл ociver.h, как предложил Эрик Моффитт.
- Заключает в кавычки пути к файлам для каталога клиента Oracle, что устраняет ошибки, если пути содержат пробелы.
Чтобы использовать его вместо репозитория CRAN, просто запустите
devtools::install_github('andrew-schulman/ROracle')
Я использую 4.02. Я обнаружил, что новейший пакет ROracle на веб-сайте Oracle работает с InstantClient и установкой Sys.setenv, описанной выше.
Спасибо за продолжение mirkohosro.