Rcpp и компилятор C++ по умолчанию

у меня есть некоторые странные проблемы с Rcpp-он использует непредсказуемый компилятор C++. Этот вопрос несколько похож на этот вопрос.
Я на OSX, у меня 2 complilers - по умолчанию clang и clang-omp С поддержкой openmp. Также у меня есть следующие ~/.R/Makevars файл (где я настроил clang-omp как компилятор по умолчанию):

CC=clang-omp
CXX=clang-omp++
CFLAGS + = - O3-стена-труба-педантичный-std=gnu99
CXXFLAGS + = - O3 - Стена-труба-Wno-неиспользованный-педантичный-fopenmp

проблема в том, что пакет, который я разрабатываю, компилируется с clang++, а не clang-omp++. Я также попытался (в качестве эксперимента по проблеме lacate) изменить пакет src/Makevars и set 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;
}  

вызов sourceCpp от R:

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

/ библиотека / фреймворки / R. framework/ресурсы/bin / R CMD SHLIB-o 'sourceCpp_1.Итак, Rcpp_compiler.cpp'
clang-omp++ - I / библиотека / фреймворки / R. framework / ресурсы/include-DNDEBUG-I / usr / local/include-I / usr / local/include / freetype2-I / opt/X11 / include -Я"/пользователи/dmitryselivanov/библиотеки/Р/3.2/библиотека/Rcpp/включить" -я"/пользователи/dmitryselivanov/проекты/эксперименты/ГРЦ" -спосил -стены -mtune=сердечником2 -г -О2 -О3 -стены -трубы -кто-неиспользованный -педантичный -fopenmp -с Rcpp_compiler.cpp-o Rcpp_compiler.o
clang-omp++ -dynamiclib -зя,-headerpad_max_install_names -неопределенные dynamic_lookup -single_module -multiply_defined пресечения -л/библиотеки/фреймворки/Р. рамки/ресурсы/библиотека-л в/usr/местные/библиотека-о sourceCpp_1.так Rcpp_compiler.о - F / Library / Framework / 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;
}  

библиотека / фреймворки / R. framework/ресурсы/bin / R CMD SHLIB-o 'sourceCpp_2.Итак, Rcpp_compiler.cpp'
clang++ - std=c++11-I / библиотека / фреймворки / R. framework / ресурсы / include-DNDEBUG-I / usr / local/include -Я в/usr/местные/включать/freetype2 -я/опт/Х11/включить-я"/пользователи/dmitryselivanov/библиотеки/Р/3.2/библиотека/Rcpp/включить" -я"/пользователи/dmitryselivanov/проекты/эксперименты/ГРЦ" -спосил -стены -mtune=сердечником2 -г -О2 -ц Rcpp_compiler.cpp-o Rcpp_compiler.o
clang++ -с std=с++11 -dynamiclib -от WL,-headerpad_max_install_names -неопределенные dynamic_lookup -single_module -multiply_defined подавить -л/библиотеки/фреймворки/Р. основы/ресурсы/библиотека-л в/usr/местные/библиотека-о sourceCpp_2.так Rcpp_compiler.о - F / Library / Framework / R. framework/.. - 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 язык.UTF-8 / en_US.UTF-8 / en_US.UTF-8/C / en_US.UTF-8 / en_US.UTF-8 прикрепленные базовые пакеты:
1 статистика графика grDevices utils наборы данных методы базы данных
другие пакеты: 1 Rcpp_0.12.1
загружается через пространство имен (и не прикрепляется): 1 tools_3.2.1

2 ответов


спасибо, @Dirk намек, я наконец получил ответ. Надеюсь, это сэкономит кому-то немного времени. Следующие две строки в ~/.R/Makevars решить мою проблему:

CXX1X=clang-omp++

подробности на эта запись R Extensions раздел.


Я прочитал только одну строку ваш вопрос и остановилась:

у меня есть некоторые странные проблемы с Rcpp-он использует непредсказуемый компилятор C++

это как неправильно, а также воспалительные. Пожалуйста, прочитайте документацию R, включенную в вашу версию R, и узнайте, как R устанавливает эти вещи.

Rcpp не делает ничего лишнего. Все это поведение по умолчанию R:

  • как пользователь вы можете установить это в ~/.R/Makevars

  • в качестве автора пакета, нацеленного на портативные и CRAN-совместимые пакеты, вы не можете не использовать, скажем,configure на построенном времени пакета.

это все документировано и имеет это уже обсуждалось.