【问题标题】:Preparing for CRAN: '-fopenmp' clang error?为 CRAN 做准备:'-fopenmp' clang 错误?
【发布时间】:2017-10-12 09:01:27
【问题描述】:

我正在准备一个包(使用 Rcpp 和 RcppArmadillo)提交给 CRAN。我正在使用 Travis CI,并包含以下内容以更彻底地测试我的包:

os:
  - linux
  - osx
compiler:
  - clang
  - gcc

然而,当在 OS X 上使用 clang 时,这会产生(似乎很熟悉)错误

* installing *source* package ‘my_pkg’ ...
** libs
clang++  -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I"/Users/travis/R/Library/Rcpp/include" -I"/Users/travis/R/Library/RcppArmadillo/include" -I/usr/local/include  -fopenmp  -fPIC  -Wall -g -O2  -c RcppExports.cpp -o RcppExports.o
clang: error: unsupported option '-fopenmp'
make: *** [RcppExports.o] Error 1
ERROR: compilation failed for package ‘pkg’
* removing ‘/Users/travis/build/my_user/pkg/pkg.Rcheck/pkg’

通过适当地调整我的travis.yml 文件以遵守here 建议的解决方法之一,我似乎可以避免这个问题。

我的问题是:如果我想把它放在 CRAN 上该怎么办? Jim 的建议在我看来只是本地的,我是否必须在我的包中做一些事情来自动避免用户的编译问题才能被 CRAN 接受?

编辑:更具体一点,我可以将CXX=g++ 放在Makevars 中,还是不赞成(这样就足够了)?

【问题讨论】:

    标签: r clang travis-ci rcpp cran


    【解决方案1】:

    所以……请一次一步。你在这里拉哪个 RcppArmadillo 版本?你在拉哪个clang版本?那个clang版本来自哪里?是否支持 OpenMP?

    从 RcppArmadillo 的上一个版本开始,我们确保我们只是在 macOS 上关闭 OpenMP ,因为构建支持太脆弱了,请参阅 this PR on GitHub。因此,您可能必须在文件中删除无条件使用-fopenmp,或者简单地不使用矩阵的“单元格”(即clang && macOS)。

    否则,answer by Jim Hester 是正确的。事情只是在 macOS 上做更多的工作。

    【讨论】:

    • Travis 正在使用 R 3.4.2、Rcpp 0.12.13 和 RcppArmadillo 0.7.960.1.2。我不确定它使用的是什么 clang 版本,它只是说“在 OS X 上,clang 的版本由 osx_image 的选择控制”,但我无法找到这会导致什么版本。就我而言我知道,我没有在我的代码中使用 OpenMP,除非它为某些事情自动启用。我主要担心的是,虽然我不妨跳过矩阵的 clang && macOS 部分(或者例如,按照 Jim 的建议将 SHLIB_OPENMP* 标志设置为空),但稍后提交给 CRAN 时这会咬我吗?
    • 鉴于有较新版本的 RcppArmadillo 可用,只需向 Imports 添加版本要求就足够了吗?
    • 不,全新的 0.8.100.1.0 执行相同的逻辑。我们还必须添加额外的舞蹈,请参阅our configure script,但对于我使用 RcppArmadillo 的包裹,我不需要它。 405 CRAN 使用 RcppArmadillo 为您提供使用示例 --- AFAIK 没有做任何特别的事情,也没有被阻止。
    • 我明白了,谢谢!将问题交给用户似乎更容易且不那么尴尬,用户只需要遵循 Jim 提出的步骤即可。不用说,我宁愿不走跳舞路线……
    • 我希望这不是一团糟,但我们处于“摇滚”(康拉德在足够现代的编译器上自动打开 OpenMP)和“困难的地方”(macOS 及其无法始终如一地提供 OpenMP,R Core / CRAN 选择现在将他们自己的编译器与 OpenMP 一起使用)。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2010-10-17
    • 2014-07-25
    • 2014-11-23
    相关资源
    最近更新 更多