【问题标题】:How to change which C++ version compiler is used when installing an R package from source?从源代码安装 R 包时如何更改使用的 C++ 版本编译器?
【发布时间】:2020-09-20 10:47:08
【问题描述】:

我正在尝试使用 remotes::install_github("pkgname") 从源代码安装 R 包。我收到以下错误:

/bin/sh: /usr/local/Cellar/gcc/9.2.0/bin/g++-7: No such file or directory

我检查了,我有 g++-9 代替。我一直在寻找一种方法来更改设置以指向正确的路径,但到目前为止还没有运气。我什至不确定要查看哪个包或是否要处理 R 配置文件。任何帮助将不胜感激。

我在 Mac OSX 10.15.5 (Catalina) 上使用 R 版本 3.6.3。我安装了 XCode 开发人员工具,但每当我运行检查时,RStudio 都会建议我安装它们,就好像它找不到一样。

非常感谢

【问题讨论】:

    标签: r package rcpp


    【解决方案1】:

    按照您的建议,R 似乎看不到您的 g++ 编译器。

    1 检查 g++ 是否在 PATH 上 您是否使用自制软件安装了 R?由于错误路径指向 /usr/local/Cellar,似乎就是这种情况。

    您可以通过在 Mac OS 上打开终端程序并键入以下内容来查看 g++ 编译器是否在路径上:

    echo $CXX
    

    如果它返回 null(或什么都没有),那么路径上没有任何内容。

    2 在 brew 中安装 g++ 让我们在 brew 中安装 g++。打开终端并运行以下命令,在每一行后按回车键:

    brew update
    brew install gcc48
    brew doctor
    

    在此之后,请重新启动您的计算机。

    3 检查 g++ 现在是否在 PATH 上

    在终端上再次运行echo $CXX。如果这仍然不起作用,请查看当前问题:

    https://github.com/r-lib/rlang/issues/754

    我建议如果这不起作用,请尝试再次安装 XCode 开发人员工具。你可以这样做:

    xcode-select --install
    

    【讨论】:

    • 我已经重新安装了 xcode 开发者工具,但问题依然存在。这让我觉得它们的安装方式可能存在问题。我已经更改了 R 项目配置文件,所以现在它找到了实际的编译器链接,但这似乎是一种解决方法,而不是修复实际问题(库开始安装,但我将不得不进行很多失败现在挖掘)。感谢您的建议!
    【解决方案2】:

    除了@bats_n_stats(很棒!)所写的内容之外,还有以下内容:

    每个 Rcpp 的使用都是由 R 本身驱动的

    R 可以通过R CMD config 调用告诉我们它使用了什么。在我的系统上

    edd@rob:~$ R CMD config CXX
    ccache g++
    edd@rob:~$ 
    

    意思是g++(无限定版本)的(标准)值与ccache提供的加速缓存结合使用(不同的主题,我过去写过博客)

    您也可以通过grep 在实际的配置文件中查看(我直接在下面查找)

    edd@rob:~$ grep ^CXX $(R RHOME)/etc/Makeconf
    CXX = g++ -std=gnu++11
    CXXCPP = $(CXX) -E
    CXXFLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-Do_dS_/r-base-4.0.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXXPICFLAGS = -fpic
    CXX11 = g++
    CXX11FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-Do_dS_/r-base-4.0.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX11PICFLAGS = -fpic
    CXX11STD = -std=gnu++11
    CXX14 = g++
    CXX14FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-Do_dS_/r-base-4.0.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX14PICFLAGS = -fpic
    CXX14STD = -std=gnu++14
    CXX17 = g++
    CXX17FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-Do_dS_/r-base-4.0.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX17PICFLAGS = -fpic
    CXX17STD = -std=gnu++17
    CXX20 = g++
    CXX20FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-Do_dS_/r-base-4.0.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX20PICFLAGS = -fpic
    CXX20STD = -std=gnu++2a
    CXX_VISIBILITY = -fvisibility=hidden
    edd@rob:~$ 
    

    这个值 all 来自 R 本身构建时。因此,如果这对您的 Catalina 系统有影响,您需要查看您从哪里获得 R 以及那里可能出现的问题。使用 Cellar 暗示了 macOS 特定的内容,可能不是 https://mac.r-project.org/ 页面中建议的 R。

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 2018-12-22
      • 2014-07-21
      相关资源
      最近更新 更多