Rcpp和默认的C++编译器

Dmi*_*nov 11 macos r rcpp clang++

我对Rcpp有一些奇怪的麻烦 - 它使用了不可预测的C++编译器.这个问题有点类似于这个问题.
我在OSX上,我有2个编译器 - 默认clang和openmp clang-omp支持.我也有以下~/.R/Makevars文件(我设置clang-omp为默认编译器):

CC = clang-omp
CXX = clang-omp ++
CFLAGS + = -O3 -Wall -pipe -pedantic -std = gnu99
CXXFLAGS + = -O3 -Wall -pipe -Wno-unused -pedantic -fopenmp

问题是,我正在开发的软件包编译而clang++不是clang-omp++.我也尝试过(作为实验来解决问题)更改包src/Makevars和设置CXX=clang-omp++以及修改后的$R_HOME/etc/Makeconf CXX条目CXX = clang-omp++.没有运气 - 它仍然可以编译clang++.不知道为什么会这样.

这里也是小的可重现的(来自控制台R和来自Rstudio)的例子(不知道它是否与上面的问题有关).假设2个非常相似的cpp函数:
1.

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
  return x * 2;
}  
Run Code Online (Sandbox Code Playgroud)

sourceCpp来自R的电话:

library(Rcpp)  
sourceCpp("src/Rcpp_compiler.cpp", verbose = T)
Run Code Online (Sandbox Code Playgroud)

/Library/Frameworks/R.framework/Resources/bin/R CMD SHLIB -o'ourceCpp_1.so''Rcpp_compiler.cpp'clang
-omp ++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Users/dmitryselivanov/Library/R/3.2/library/Rcpp/include"-I"/ Users/dmitryselivanov /项目/实验/ SRC" -fPIC -Wall -mtune = core2的-g -O2 -O3 -Wall -pipe -Wno非占线-pedantic -fopenmp -c Rcpp_compiler.cpp -o Rcpp_compiler.o
铛-OMP ++ -dynamiclib -Wl ,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L ​​/ usr/local/lib -o sourceCpp_1.so Rcpp_compiler.o -F/Library/Frameworks/R. framework/.. -framework R -Wl,-frame,-Wl,CoreFoundation

按预期工作 - 使用clang-omp ++和我的所有标志 ~/.R/Makevars

2.

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
  return x * 2;
}  
Run Code Online (Sandbox Code Playgroud)

库/框架/ R.framework/Resources/bin/R CMD SHLIB -o'ourceCpp_2.so''Rcpp_compiler.cpp'clang
++ -std = c ++ 11 -I/Library/Frameworks/R.framework/Resources/include - DNDEBUG -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Users/dmitryselivanov/Library/R/3.2/library/Rcpp/include"-I"/Users/dmitryselivanov/projects/experiments/src"-fPIC -Wall -mtune = core2 -g -O2 -c Rcpp_compiler.cpp -o Rcpp_compiler.o
clang ++ -std = c ++ 11 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L ​​/ usr/local/lib -o sourceCpp_2.so Rcpp_compiler.o -F/Library/Frameworks/R.framework/.. - 框架R -Wl,-framework -Wl,CoreFoundation

我只添加了// [[Rcpp::plugins(cpp11)]]clang++而不是编译clang-omp++

这是我的sessionInfo():

R版本3.2.1(2015-06-18)平台:x86_64-apple-darwin13.4.0(64位)
运行于:OS X 10.10.5(Yosemite)
语言环境: 1 en_US.UTF-8/en_US.UTF- 8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8附加基础包:
1 stats graphics grDevices utils数据集方法基于
其他附加包: 1
通过命名空间加载Rcpp_0.12.1 (并未附加) : 1个工具 _3.2.1

Dmi*_*nov 11

谢谢,@ Dirk提示,我最终得到了答案.希望,这会为某人节省一点时间.以下两行~/.R/Makevars解决了我的问题:

CXX1X=clang-omp++
Run Code Online (Sandbox Code Playgroud)

查看详情此写作R附加部分.

  • 这从 R 3.4 开始发生了变化。之前是CXX1X。 (2认同)