[Rcpp-devel] trying installing RcppCNPy with -std=c++11 (or c++0x) and failed due to incompatible number of arguments
Dirk Eddelbuettel
edd at debian.org
Tue Feb 19 18:37:50 CET 2013
On 19 February 2013 at 12:26, Gong-Yi Liao wrote:
|
| I read the 'Limitation' part of RppCNPy package's document
| (RcppCNPy-intro) and found:
|
| "So until R switches to allowing -std=c++0x on CRAN packages, users will
| need to rebuild both Rcpp and RcppCNPy with the switch enabled."
|
| Does that means putting '-std=c++11' in CXXFLAGS while building
| RcppCNPy will not work ? ( I have build Rcpp with -std=c++11 without any
| problem)
Ouch. Forget about that one. You are quite right. The full context is:
\subsection{Integer support}
Support for integer data types is conditional on use of the \code{-std=c++0x}
compiler extension. Only the newer standard supports the \code{long long int}
type needed to represent \code{int64} data on a 32-bit OS. So until \R
switches to allowing \code{-std=c++0x} on CRAN packages, users will need to
rebuild both \pkg{Rcpp} and \pkg{RcppCNPy} with the switch enabled. As shown
in the previous examples, integers also transparently convert to float types.
So you are caught between a rock and a hard place. If the build currently
fails with -std=c++0x (or -std=c++11) you will need to debug it. I believe
this worked at some point --- I did a few quick releases last summer but
removed integer support relatively early on.
As the paragraph states, NumPy uses 64bit ints, and we only get those
(portably) in R via long long int, which in turn requires the currently
unsupported (at CRAN) C++11 switch.
| The reason I need to have '-std=c++0x' (or c++11) is loading the integer
| data in np.array, I have done some simple experiment:
|
| === In Python ==
| In [1]: x = pylab.randn(100, 3)
| In [2]: y = pylab.poisson(lam=3.5, size=200]
| In [3]: numpy.save('test.npy', [x, y])
|
|
| == In R (RcppCNPy is build without '-std=c++0x' )====
| > library(RcppCNPy)
| > z <- load('test.npy')
| Error in npyLoad("test.npy") : littleEndian error
|
| So, I thought that rebuilding RcppCNPy with '-std=c++0x' can help me to
| read the integer data restored in a .npy file.
|
| Is there any way to process the integer data restored in .npy file other
| than
| ==== In Python =====
| In [1]: y = pylab.double(poission(lam=3.5, size=200)
| In [2]: numpy.save('test.npy', [x, y])
|
| ?
I don't think so / I don't know. I really needed float / double support, so
I made that work. For the rest you are on your own. If I get some time I
will take a look, but I can't promise anything.
If you are on a 64-bit OS you may get by with long int but this will not, I
fear, extend to 32-bit and is hence not something I can put into a CRAN
release.
Sorry!
Dirk
|
| Gong.
|
|
| On 02/19/2013 11:57 AM, Dirk Eddelbuettel wrote:
| > On 19 February 2013 at 11:47, Gong-Yi Liao wrote:
| > | * installing *source* package ‘RcppCNPy’ ...
| > | ** package ‘RcppCNPy’ successfully unpacked and MD5 sums checked
| > | ** libs
| > | g++ -I/usr/share/R/include -DNDEBUG
| > | -I"/usr/local/lib/R/site-library/Rcpp/include" -fpic -std=c++11 -O2
| > | -pipe -g -c cnpy.cpp -o cnpy.o
| >
| > Please remove the -std=c++11 from your CXXFLAGS (or however it crept in).
| >
| > CRAN does not accept it, the package is maintained and supported as a CRAN
| > package. If you need extensions (such as the C++11 support) you are
| > currently on your own.
| >
| > | It seems that this problem is caused by some function defined
| > | in"codecvt.h".
| > | Does anyone have encountered similar problem ?
| >
| > It may be a simple matter of include file order. I don't know.
| >
| > Dirk
| >
|
|
| --
| Gong-Yi Liao
| Department of Statistics
| University of Connecticut
|
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list