Я пытаюсь установить пакет ROracle версии 1.3-1.1 на R версии 4.4.1. ОС — RHEL 8.9, ядро 4.18.0-513.24.1.el8_9.x86_64. Я установил клиент Oracle 23, включая JDBC, ODBC и все пакеты разработки (из https://yum.oracle.com/repo/OracleLinux/OL8/oracle/instantclient23/x86_64/index.html), и использую Переменные среды OCI_INC и OCI_LIB для указания расположения файлов и библиотек inc для OCI. При запуске R CMD INSTALL ROracle_1.3-1.1.tar.gz я получаю следующую ошибку:
* installing to library ‘/export/apps/prod/*****/R/x86_64-redhat-linux-gnu-library/4.4’
* installing *source* package ‘ROracle’ ...
** package ‘ROracle’ successfully unpacked and MD5 sums checked
** using staged installation
configure: creating ./config.status
config.status: creating src/Makevars
** libs
using C compiler: ‘gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20)’
gcc -I"/usr/include/R" -DNDEBUG -I/usr/include/oracle/23/client64 -I/usr/local/include -fpic -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -c rodbi.c -o rodbi.o
rodbi.c: In function ‘rociDrvInit’:
rodbi.c:532:31: error: format not a string literal and no format arguments [-Werror=format-security]
RODBI_ERROR((const char *)errMsg); \
^~~~~~
rodbi.c:217:15: note: in definition of macro ‘RODBI_ERROR’
error(err)
^~~
rodbi.c:1221:3: note: in expansion of macro ‘RODBI_CHECK_DRV’
RODBI_CHECK_DRV(drv, __FUNCTION__, 1, TRUE,
^~~~~~~~~~~~~~~
rodbi.c: In function ‘rociConInit’:
rodbi.c:552:31: error: format not a string literal and no format arguments [-Werror=format-security]
RODBI_ERROR((const char *)errMsg); \
^~~~~~
(и еще несколько экранов с похожими сообщениями). Я также экспериментировал с более ранней (19.23) версией клиента с тем же результатом. Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно? Спасибо!
С наилучшими пожеланиями,
Николай
ROracle 1.4-1, загруженный с сайта Oracle в файле tar.gz, установился правильно для всех, у кого возникла проблема.





Вы не делаете ничего плохого, просто ограничиваете предупреждения компиляции. Чтобы избежать подобных ошибок, необходимо улучшить качество кода пакета, но это касается Oracle.
Флаг -Werror=format-security установлен для gcc (вы можете увидеть его в строке, начинающейся с gcc), и некоторые вещи в коде пакета вызывают это предупреждение, и компиляция завершается неудачей. Вам нужно выяснить, где установлен этот флаг (например, CFLAGS= в ~/.R/Makevars). Как только вы узнаете, где он установлен, попробуйте удалить его, переустановить пакет (а затем снова включить его, если хотите).
Спасибо, это было полезно. Оказывается, этот флаг был установлен в нескольких местах файла Makeconf R (в моем случае он находился в /usr/lib64/R/etc/Makeconf) и действительно был причиной ошибок компиляции.
Не знаю, так ли вы, но не стоит менять /usr/lib64/.../Makeconf, так как это значение R по умолчанию. Правильный способ здесь — создать свой собственный ~/.R/Makevars и установить там CFLAGS, чтобы переопределить значение по умолчанию. Опять же, это вина Oracle, поскольку она поставляет пакеты, которые не компилируются в конфигурации R по умолчанию. Надеюсь, они обновят его.
Есть ли флаг для отмены эффекта -Werror=format-security? Я думаю, что изменение ~/.R/Makevars подойдет, если вы хотите добавить флаги, но я не знаю, как удалить флаги таким образом.
Вы не можете удалить его AFAICT, но вы можете сбросить все это, за исключением этого флага. Итак, если у вас CFLAGS=-a -b -c -Werror=format-security -d -e по умолчанию в R, вы должны установить CFLAGS=-a -b -c -d -e на ~/.R/Makevars.
У меня та же проблема в Ubuntu 22.04.