[Rcpp-devel] cxxfunction -- extra argument to g++

Romain Francois romain at r-enthusiasts.com
Tue Jan 31 09:41:57 CET 2012


Le 24/01/12 22:09, Dirk Eddelbuettel a écrit :
>
> On 24 January 2012 at 15:36, Whit Armstrong wrote:
> | Thanks, Dirk, as always for the quick response.
> |
> | It works, but I get an unusual compile error with the most recent
> | RcppArmadillo (installed with install.packages this morning).
> |
> | require(inline)
> | require(Rcpp)
> | require(RcppArmadillo)
> | cppbugs.plugin<- getPlugin("RcppArmadillo")
> | cppbugs.plugin$env$PKG_CXXFLAGS<- "-std=c++0x"
> | foo<- cxxfunction(signature(hat="numeric"), body="return
> | R_NilValue;",settings=cppbugs.plugin)
> |
> | results in:
> |
> | Error in compileCode(f, code, language = language, verbose = verbose) :
> |   Compilation ERROR, function(s)/method(s) not created! In file
> | included from /usr/local/lib/R/site-library/RcppArmadillo/include/armadillo_bits/Mat_meat.hpp:6091:0,
> |                  from
> | /usr/local/lib/R/site-library/RcppArmadillo/include/armadillo:369,
> |                  from
> | /usr/local/lib/R/site-library/RcppArmadillo/include/RcppArmadilloForward.h:36,
> |                  from
> | /usr/local/lib/R/site-library/RcppArmadillo/include/RcppArmadillo.h:25,
> |                  from file1724747be803.cpp:3:
> | /usr/local/lib/R/site-library/RcppArmadillo/include/RcppArmadillo/Mat_meat.h:
> | In function ‘void arma::RcppArmadillo::check()’:
> | /usr/local/lib/R/site-library/RcppArmadillo/include/RcppArmadillo/Mat_meat.h:34:5:
> | error: expected ‘;’ before ‘}’ token
> | make: *** [file1724747be803.o] Error 1
> | In addition: Warning message:
> | running command '/usr/lib/R/bin/R CMD SHLIB file1724747be803.cpp 2>
> | file1724747be803.cpp.err.txt' had status 1
>
>
> Easy enough:
>
>      inline void check(){
> #if !defined(ARMA_USE_CXX11)
> 	arma_type_check_cxx1998<  is_same_type<  eT, rcpp_type>::value == false>::apply();
> #else
> 	static_assert( is_same_type<  eT, rcpp_type>::value , "error: incorrect or unsupported type" )
> #endif
>      }
>
> There is indeed a semicolon missing in the released version, but I seem to
> have added that in svn commit 3438.  Should get fixed in the next release. Ah
> yes, and ChangeLog says that we had this reported on Dec 31 by Teo Guo Ci
>
> 2011-12-31  Dirk Eddelbuettel<edd at debian.org>
>
> 	* inst/include/RcppArmadillo/Mat_meat.h: Add missing semicolon in
> 	code ifdef'ed for C++0x mode, with thanks to Teo Guo Ci
>
>
> Dirk

ooooooops :/

> |
> | Probably something I've overlooked.
> |
> | However, changing the 'cppbugs.plugin<- getPlugin("RcppArmadillo")'
> | command to 'cppbugs.plugin<- getPlugin("Rcpp")' allows the example to
> | compile.
> |
> | Is there a c++0x issue in the latest RcppArmadillo?  I have:
> | Version:            0.2.34
> | Date:               $Date: 2011-12-12 16:56:37 -0600 (Mon, 12 Dec 2011) $
> |
> | Anyway, I'll keep tinkering...
> |
> | -Whit
> |
> |
> |
> |
> | On Tue, Jan 24, 2012 at 3:18 PM, Dirk Eddelbuettel<edd at debian.org>  wrote:
> |>
> |>  On 24 January 2012 at 14:46, Whit Armstrong wrote:
> |>  | using cxxfunction is there an easy (not using a custom plugin) way to
> |>  | add -std=c++0x to the g++ call?
> |>
> |>  The best way, I think, is to call a plugin and to modify it.
> |>
> |>  Quick example:
> |>
> |>
> |>  R>  myplugin<- getPlugin("Rcpp")
> |>  R>  myplugin$env$PKG_CXXFLAGS<- "-std=c++0x"
> |>  R>  f<- cxxfunction(signature(), settings=myplugin, body='
> |>  +    std::vector<double>  x = { 1.0, 2.0, 3.0 };  // fails without -std=c++0x
> |>  +    return Rcpp::wrap(x);
> |>  + ')
> |>  R>  f()
> |>  [1] 1 2 3
> |>  R>
> |>
> |>
> |>  If you don't use the modified settings, it'll blow up as the 'curly init' is
> |>  a new feature:
> |>
> |>     filebee52557bd2.cpp:32:44: error: in C++98 ‘x’ must be initialized by constructor, not by ‘{...}’
> |>     filebee52557bd2.cpp:32:44: error: could not convert ‘{1.0e+0, 2.0e+0, 3.0e+0}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<double>’
> |>
> |>  but with the switch it all flies.
> |>
> |>  I think I'll add that to the Rcpp-FAQ now.
> |>
> |>  Note though that here I simply assigned PKG_CXXFLAGS which had been empty as
> |>  the Rcpp plugin does not set it. Other plugins may, so you one may have
> |>  append rather than overwrite.
> |>
> |>  Dirk
> |>
> |>  --
> |>  "Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
> |>  dark to read." -- Groucho Marx
>


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
R Graph Gallery: http://addictedtor.free.fr/graphiques
blog:            http://romainfrancois.blog.free.fr
|- http://bit.ly/xbKv0R : Crawling facebook with R
|- http://bit.ly/v3WB8S : ... And now for solution 17, still using Rcpp
`- http://bit.ly/uaQDGr : int64: 64 bit integer vectors for R


More information about the Rcpp-devel mailing list