【问题标题】:Can't build RDCOMClient using rtools40 and R 4.0无法使用 rtools40 和 R 4.0 构建 RDCOMClient
【发布时间】:2020-08-27 07:48:34
【问题描述】:

不久前,我创建了 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 新手。

【问题讨论】:

    标签: c++ r rdcomclient rtools


    【解决方案1】:
    1. 安装 R-4.0.0
    2. 安装 Rtools35
    3. 编辑 $R_HOME/etc/x64/Makeconf(用于 R-4.0.0-x64)
    4. Rcmd 安装 RDCOMClient

    【讨论】:

    • 感谢您的回答。使用这种方法可能对我有用,但似乎每个人都必须这样做。包依赖项也不会那么容易工作。我想我可以编译二进制文件,将其作为 GitHub 版本发布,然后让其他人使用 install.packages(url = "...") 安装它。
    【解决方案2】:

    我可以确认上述答案中描述的程序朝着正确的方向前进,但可能需要一些额外的步骤。我还可以确认下面的过程会生成一个 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(点击绿色克隆按钮并选择下载 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")
    

    【讨论】:

    • 这适用于一个小的错字更正:将“C:\Program Files\R\R-4.0.0\bin.x64”中的最后一个句点更改为反斜杠:“C:\Program Files \R\R-4.0.0\bin\x64"。另外,为了安全起见,我会确保指定设置系统环境变量。感谢您的帮助!
    【解决方案3】:

    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")

    【讨论】:

    • 感谢您在您的 Github 页面上提供已编译的二进制文件!我想为另一个包重现你的方法。您是在安装 RTools3.5 之前卸载了 RTools4.0 还是同时安装了两者?
    • 两个都安装了
    【解决方案4】:

    这是一个快速修复:

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

    【讨论】:

    • 我在 2021 年 1 月 18 日运行 R 4.0,这对我来说非常有效。感谢您发布此解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2016-01-28
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多