无法使用 rtools40 和 R 4.0 构建 RDCOMClient

Kyl*_*ard 7 c++ r rdcomclient rtools

不久前,我创建了 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
Run Code Online (Sandbox Code Playgroud)

同样,以上在 R 3.6 中有效。

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

或者,如果我可以对 R 或 cpp 代码进行细微的更改来解决我的问题,我会全力以赴。不过,我是 cpp 新手。

小智 5

这是一个快速修复:

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


Kyl*_*ard 1

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

\n

前两个步骤是相同的​​:

\n

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

\n

安装 Rtools35 ( https://cran.r-project.org/bin/windows/Rtools/Rtools35.exe在目录 c:\\Rtools 中

\n

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

\n

C:\\rtools

\n

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

\n

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

\n

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

\n
MINGW_PREFIX = /mingw_$(WIN)\nBINPREF ?= "$(RTOOLS40_ROOT)/mingw_64/bin/"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
MINGW_PREFIX = /mingw_$(WIN)\nBINPREF ?= "$(RTOOLS40_ROOT)/mingw_32/bin/"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

打开 Windows 命令提示符并更改到包含 RDCOMClient 子目录的目录并键入:

\n

R CMD INSTALL RDCOMClient \xe2\x80\x93-build RDCOMClient.zip

\n

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

\n

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

\n