You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RHEL 8.9环境下安装ROracle 1.3-1.1版本报错求助

解决ROracle 1.3-1.1在RHEL8+R4.4.1下的编译错误

环境信息

  • R版本:4.4.1
  • 操作系统:RHEL 8.9(内核4.18.0-513.24.1.el8_9.x86_64)
  • Oracle客户端版本:23(含JDBC/ODBC及开发rpm包),也曾尝试19.23版本
  • 已通过OCI_INC、OCI_LIB环境变量指定OCI头文件和库路径

编译错误详情

执行R CMD INSTALL ROracle_1.3-1.1.tar.gz时触发gcc编译错误:

* 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);                                 \
                               ^~~~~~

问题原因

RHEL 8的gcc默认启用了-Werror=format-security编译选项,该选项要求error()这类格式化函数的第一个参数必须是字符串字面量,而ROracle 1.3-1.1的源码中,RODBI_ERROR宏直接传入了变量errMsg,不符合该安全编译规则,导致编译失败。

解决方法

方法1:临时禁用format-security警告(最简单)

安装时通过环境变量添加编译选项,取消该警告的错误触发:

CFLAGS="-Wno-error=format-security" R CMD INSTALL ROracle_1.3-1.1.tar.gz

如果需要指定Oracle库链接选项,可补充LDFLAGS:

CFLAGS="-Wno-error=format-security" LDFLAGS="-L/usr/lib/oracle/23/client64/lib -lclntsh" R CMD INSTALL ROracle_1.3-1.1.tar.gz

方法2:修改ROracle源码(更彻底)

  1. 解压源码包并进入源码目录:
tar zxvf ROracle_1.3-1.1.tar.gz
cd ROracle/src
  1. 编辑rodbi.h文件,找到RODBI_ERROR宏的定义(约217行):
    原宏定义:
#define RODBI_ERROR(err)         \
        error(err)

修改为:

#define RODBI_ERROR(err)         \
        error("%s", err)

通过%s占位符传递变量,符合format-security的规则。
3. 返回源码根目录重新安装:

cd ..
R CMD INSTALL .

方法3:尝试预编译二进制包

如果Oracle官方或CRAN提供了适配RHEL8+R4.4.1的预编译ROracle包,可直接下载安装,跳过源码编译步骤。


内容的提问来源于stack exchange,提问作者Nikolai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:24:52