2014-01-16 3 views
5

ich folgende seltsame Störung erhalte:sourceCpp von RCPP gibt seltsame Kompilierungsfehler auf kanonisches Beispiel

> sourceCpp("comp.Cpp") 
Warning message: 
In sourceCpp("comp.Cpp") : 
No Rcpp::export attributes or RCPP_MODULE declarations found in source 

wenn ich sourceCpp verwenden. Die „comp.Cpp“ Datei sieht wie folgt aus:

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp:export]] 
RcppExport SEXP comp(int n){ 
    int i; 
    Rcpp::NumericVector product(n); 
    for(i=0;i<n;i++){ 
     product[i]=i; 
    } 
    return(product); 
} 

Ich habe versucht, mein Betriebssystem zu Maverick Aktualisierung (und hatte dann Xcode Kommandozeilen-Tools und ein paar andere Dinge neu zu installieren), aber dieser Fehler früher als. Ich kann das Testpaket machen und es installieren und die Hallo-Welt, die es zur Verfügung stellt, ausführen, so dass das Rcpp-Paket meistens funktioniert. Ich habe auch einen anderen Fehler von in R ausgeführt wird:

cppFunction(" 
    int useCpp11() { 
     auto x = 10; 
     return x; 
    } 
", plugins=c("cpp11")) 

das ist

llvm-g++-4.2 -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include  -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include" -std=c++11 -fPIC -mtune=core2 -O3 -c file69810a85a0d.cpp -o file69810a85a0d.o 
Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput, : 
    Error 1 occurred building shared library. 
cc1plus: error: unrecognized command line option "-std=c++11" 
make: *** [file69810a85a0d.o] Error 1 

Ich weiß nicht, ob diese beiden Dinge zusammenhängen. Ich denke, dass etwas mit meinem Compiler passiert, der nicht gut mit Attributen spielt, aber Jagen im Internet hat mich nicht ausreichend erzogen, das zu verstehen.

Jede Hilfe würde sehr geschätzt werden.

Antwort

7

Ändern Sie "[[Rcpp: export]]" durch "[[Rcpp :: export]]".

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 
SEXP comp(int n){ 
    int i; 
    Rcpp::NumericVector product(n); 
    for(i=0;i<n;i++){ 
     product[i]=i; 
    } 
    return(product); 
} 
+1

Obwohl dies nicht das Ziel des OP ist, hat es keinen Einfluss auf die Erstellung und deren Ausfall. Ihr Fix würde helfen, die Funktion mit R zu verbinden, aber es hilft nicht, wo gcc 4.2 einfach zu alt ist. –

3

Ihr Compiler ist zu alt für das C++ 11-Flag. Und die Fehlermeldung ist sehr klar darüber.

Versuchen Sie, -std=c++0x sowie Upgrade auf Xcode 5 (die eigene Probleme hat - aber das sind hier gut dokumentiert).

+1

Vielen Dank. Es tut mir leid zu sagen, dass ich immer noch nicht verstehe, dass der Fehler bedeutet, dass ich veraltet bin. – miratrix