无法使用 rtools40 和 R 4.0 构建 RDCOMClient

Can't build RDCOMClient using rtools40 and R 4.0

不久前,我创建了 RDCOMClient 包的一个分支,以使其与 R 3.6 (https://github.com/dkyleward/RDCOMClient) 一起工作。人们现在 运行 再次陷入问题,因为它不适用于 R 4.0。这个问题似乎不太容易解决,我希望得到一些帮助。

如果我将 Rstudio 切换回 R 3.6(和 rtools35),我可以在使用 devtools::install_github() 安装后使用该包。当我在 R 4.0(和 rtools40)中尝试时,程序包生成并且我可以通过 COM 连接到应用程序。下面的第一行代码有效,xl 是一个 COM 指针;然而,尝试用它做任何事情(比如将 Excel 设置为可见)会使 R.

崩溃
xl <-  RDCOMClient::COMCreate("Excel.Application")
xl[["Visible"]] <- TRUE

同样,以上内容适用于 R 3.6。

有没有办法继续使用以前的 rtools 进行构建?我遇到了 https://github.com/r-windows/rtools-backports#readme,它谈到了使用 rtools35 来继续构建包,所以我有希望,但我不明白如何实现它。

或者,如果我可以对 R 或 cpp 代码进行微小的更改来解决我的问题,我会洗耳恭听。不过我是cpp新手

  1. 安装 R-4.0.0
  2. 安装 Rtools35
  3. 编辑 $R_HOME/etc/x64/Makeconf(适用于 R-4.0.0-x64)
  4. Rcmd 安装 RDCOMClient

我可以确认上述答案中描述的过程指向正确的方向,但可能需要一些额外的步骤。我还可以确认下面的过程生成了一个可以安装的 Windows 二进制文件,并且将 运行 在 R-4.0.0 下:

安装 R-4.0.0 (https://cran.r-project.org/bin/windows/base/old/4.0.0/R-4.0.0-win.exe)

在目录 c:\Rtools

中安装 Rtools35 (https://cran.r-project.org/bin/windows/Rtools/Rtools35.exe)

编辑 $R_HOME/etc/x64/Makeconf(适用于 R-4.0.0-x64),方法是更改​​

##  The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= c:/rtools40

##  The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= c:/rtools

https://github.com/omegahat/RDCOMClient 下载 RDCOMClient-master.zip(单击绿色的克隆按钮并 select 下载 zip)

解压到名为 RDCOMClient 的目录

确保设置了以下 PATH 变量:

C:\Program Files\R\R-4.0.0\bin\x64 (assuming this is the location where R is installed)
C:\Rtools\bin
C:\Rtools\mingw_64\bin

使用以下值添加环境变量 BINPREF(最后的斜杠很重要):

C:/Rtools/mingw_64/bin/

打开 windows 命令提示符并切换到包含 RDCOMClient 子目录的目录并键入:

R CMD INSTALL RDCOMClient –-build RDCOMClient.zip

这会在 R-4.0.0 的本地安装中安装 RDCOMClient,并另外创建文件 RDCOMClient_0.94-0.zip,可以使用以下命令将其安装在其他系统上:

install.packages("RDCOMClient_0.94-0.zip", repos = NULL, type = "win.binary")

Rik 的回答非常有帮助,让一个版本可以正常工作;但是,在花了一天时间之后,我能够对其进行改进。我想把它放在这里,以防我不得不再做一次。主要改进是能够为 32 位和 64 位架构构建工作包。默认情况下,R 会同时安装两者,这样在安装依赖包时会更容易。

前两步相同:

安装 R-4.0.0 (https://cran.r-project.org/bin/windows/base/old/4.0.0/R-4.0.0-win.exe)

在目录 c:\Rtools

中安装 Rtools35 (https://cran.r-project.org/bin/windows/Rtools/Rtools35.exe)

如果(像我一样)您已经安装了 rtools40,则会创建一个名为 RTOOLS40_HOME 的系统环境变量。第一步是将其更改为:

C:\rtools

如果您没有安装 rtools40,则创建 RTOOLS40_HOME 系统环境变量。

make 文件中仍需要进行两处更改。这些可以在您的 R 安装目录中找到。

etc\x64\Makeconf 中,通过设置以下值添加下划线以匹配 rtools35 目录结构:

MINGW_PREFIX = /mingw_$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw_64/bin/"

etc\i386\Makeconf中做同样的事情:

MINGW_PREFIX = /mingw_$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw_32/bin/"

不要BINPREF 设置为环境变量,否则这将覆盖 makefile 更改(就像 RTOOLS40_HOME 那样)。完成这些后,按照 Rik 概述的相同步骤结束:

打开 windows 命令提示符并切换到包含 RDCOMClient 子目录的目录并键入:

R CMD INSTALL RDCOMClient –-build RDCOMClient.zip

这会在 R-4.0.0 的本地安装中安装 RDCOMClient,并另外创建文件 RDCOMClient_0.94-0.zip,可以使用以下命令将其安装在其他系统上:

install.packages("RDCOMClient_0.94-0.zip", repos = NULL, type = "win.binary")

这是一个快速修复:

install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")

我正在使用 R 4.1.2,我发现 RDCOMClient 会使 R Session 崩溃,而上述解决方案不起作用。

然后,我进一步查询源码所有者,找到了解决方案。

https://github.com/omegahat/RDCOMClient/issues/36

Duncantl 给出了解决方案并且有效。

dir.create("MyTemp")
remotes::install_github("BSchamberger/RDCOMClient", ref = "main", lib = "MyTemp")

如果成功,我们就可以加载新安装的包

library("RDCOMClient", lib.loc = "MyTemp")