gpt4 book ai didi

Rcpp 和默认 C++ 编译器

转载 作者:行者123 更新时间:2023-12-02 10:08:15 24 4
gpt4 key购买 nike

我在使用 Rcpp 时遇到了一些奇怪的麻烦 - 它使用不可预测的 C++ 编译器。这个问题有点类似于this question
我在 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;
}

从 R 调用 sourceCpp:

library(Rcpp)  
sourceCpp("src/Rcpp_compiler.cpp", verbose = T)

/Library/Frameworks/R.framework/Resources/bin/R CMD SHLIB -o 'sourceCpp_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/projects/experiments/src" -fPIC -Wall -mtune=core2 -g -O2 -O3 -Wall -pipe -Wno-unused -pedantic -fopenmp -c Rcpp_compiler.cpp -o Rcpp_compiler.o
clang-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,-framework -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;
}

Library/Frameworks/R.framework/Resources/bin/R CMD SHLIB -o 'sourceCpp_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/.. -framework R -Wl,-framework -Wl,CoreFoundation

我只添加了 // [[Rcpp::plugins(cpp11)]],它使用 clang++ 而不是 clang-omp++ 进行编译

这是我的 sessionInfo() :

R version 3.2.1 (2015-06-18) Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.5 (Yosemite)
locale: 1 en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 attached base packages:
1 stats graphics grDevices utils datasets methods base
other attached packages: 1 Rcpp_0.12.1
loaded via a namespace (and not attached): 1 tools_3.2.1

最佳答案

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

CXX1X=clang-omp++

查看详细信息 this Writing R Extensions section .

关于Rcpp 和默认 C++ 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com