Rcpp und Standard-C ++ - Compiler
Ich habe einige seltsame Probleme mit Rcpp - es wird ein unvorhersehbarer C ++ - Compiler verwendet. Diese Frage ähnelt in etwadiese Frag.
Ich bin auf OSX, ich habe 2 Compliler - Standardclang
undclang-omp
mit OpenMP-Unterstützung. Auch ich habe folgende~/.R/Makevars
file (wo ich @ eingerichtet haclang-omp
als Standard-Compiler):
CC = clang-omp
CXX = clang-omp ++
CFLAGS + = -O3 -Wand -pipe -pedantic -std = gnu99
CXXFLAGS + = -O3 -Wand -pipe -Wno-unbenutzt -pedantic -fopenmp
Das Problem ist, dass das Paket, das ich entwickle, mit @ kompiliert wirclang++
, nichtclang-omp++
. Ich habe auch versucht (als Experiment, um das Problem zu lösen), das Paket zu ändernsrc/Makevars
und setCXX=clang-omp++
und darüber hinaus geändert$R_HOME/etc/Makeconf
CXX
eintrag zuCXX = clang-omp++
. Kein Glück - es kompiliert immer noch mitclang++
. Habe keine Ahnung warum es passiert.
Auch hier ist ein kleines reproduzierbares Beispiel (sowohl von Konsole R als auch von Rstudio) (weiß nicht, ob es mit dem obigen Problem zu tun hat). Angenommen, 2 sehr ähnliche cpp-Funktionen:
1.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
return x * 2;
}
AnrufsourceCpp
von R:
library(Rcpp)
sourceCpp("src/Rcpp_compiler.cpp", verbose = T)
/ Bibliothek / 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 / experimental / 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 / Bibliothek / Frameworks / R.framework / Resources / lib -L / usr / local / lib -o sourceCpp_1.so Rcpp_compiler.o -F / Bibliothek /Frameworks/R.framework/ .. -framework R -Wl, -framework -Wl, CoreFoundation
Work wie erwartet - verwendet clang-omp ++ und alle meine Flags von~/.R/Makevars
2.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
return x * 2;
}
Bibliothek / 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 / experimental / 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 / Bibliothek / Frameworks / R.framework / Resources / lib -L / usr / local / lib -o sourceCpp_2.so Rcpp_compiler.o -F / Bibliothek / Frameworks / R.framework / .. -framework R -Wl, -framework -Wl, CoreFoundation
Ich habe nur @ hinzugefü// [[Rcpp::plugins(cpp11)]]
und es kompiliert mitclang++
Anstatt vonclang-omp++
Hier ist meinsessionInfo()
:
R Version 3.2.1 (18.06.2015) Plattform: x86_64-apple-darwin13.4.0 (64-Bit)
Ausgeführt unter: OS X 10.10.5 (Yosemite)
locale:1 de_DE.UTF-8 / de_DE.UTF-8 / de_DE.UTF-8 / C / de_DE.UTF-8 / de_DE.UTF-8 angehängte Basispakete:
1 stats graphics grDevices utils Datasets Methoden base
weitere angehängte Pakete:1 Rcpp_0.12.1
über einen Namespace geladen (und nicht angehängt):1 tools_3.2.1