Ben Bolker
2013-Jul-12 02:57 UTC
[Rd] robustbase compilation problem: probably boneheaded? maybe 32-bit?
With a recent SVN build (R Under development (unstable) (2013-07-10
r63264) -- "Unsuffered Consequences"), I'm having trouble
installing the
robustbase package. The bottom line is that I *think* it's a
32-bit-system problem, but I could easily be mistaken.
robustbase is passing its package checks:
http://cran.r-project.org/web/checks/check_results_robustbase.html
... but from the names of the targets it doesn't look like it is tested
on 32-bit platforms?
The error is:
gcc -std=gnu99 -I/usr/local/lib/R/include -DNDEBUG -I/usr/local/include
-fpic -g -O2 -c init.c -o init.o
In file included from init.c:3:
robustbase.h:20: error: redefinition of typedef ?R_xlen_t?
/usr/local/lib/R/include/Rinternals.h:69: note: previous declaration of
?R_xlen_t? was here
As far as I can see there isn't any junk left over in my systems from
previous installs.
Rinternals.h has
#ifdef LONG_VECTOR_SUPPORT
typedef ptrdiff_t R_xlen_t;
typedef struct { R_xlen_t lv_length, lv_truelength; } R_long_vec_hdr_t;
# define R_XLEN_T_MAX 4503599627370496
# define R_SHORT_LEN_MAX 2147483647
# define R_LONG_VEC_TOKEN -1
#else
typedef int R_xlen_t;
# define R_XLEN_T_MAX R_LEN_T_MAX
#endif
while robustbase has
#ifndef LONG_VECTOR_SUPPORT
# ifndef XLENGTH
// for R <= 2.15.x :
# define XLENGTH(x) LENGTH(x)
typedef int R_xlen_t;
# endif
#endif
It seems the problem is that I have
#define SIZEOF_SIZE_T 4
in my config.log , which in turn turns off LONG_VECTOR_SUPPORT, which is
otherwise (?) assumed only to be true for R<=2.15.x ... can this be
because I'm on 32-bit Linux , or on old linux with gcc 4.4.3, or ... ?
<http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models>
Can anyone confirm/enlighten me?
cheers
Ben Bolker
Simon Urbanek
2013-Jul-12 03:10 UTC
[Rd] robustbase compilation problem: probably boneheaded? maybe 32-bit?
On Jul 11, 2013, at 10:57 PM, Ben Bolker wrote:> > With a recent SVN build (R Under development (unstable) (2013-07-10 > r63264) -- "Unsuffered Consequences"), I'm having trouble installing the > robustbase package. The bottom line is that I *think* it's a > 32-bit-system problem, but I could easily be mistaken. >It's a bug in robustbase - it redefines R_xlen_t without checking the R version. I think the author's true intention was to make it conditional on R version for compatibility so it should be using R_VERSION and not LONG_VECTOR_SUPPORT since the latter is irrelevant here as R 3.0.0+ will have R_xlen_t regardless of the long vector support. Cheers, Simon> robustbase is passing its package checks: > http://cran.r-project.org/web/checks/check_results_robustbase.html > > ... but from the names of the targets it doesn't look like it is tested > on 32-bit platforms? > > The error is: > > gcc -std=gnu99 -I/usr/local/lib/R/include -DNDEBUG -I/usr/local/include > -fpic -g -O2 -c init.c -o init.o > In file included from init.c:3: > robustbase.h:20: error: redefinition of typedef ?R_xlen_t? > /usr/local/lib/R/include/Rinternals.h:69: note: previous declaration of > ?R_xlen_t? was here > > As far as I can see there isn't any junk left over in my systems from > previous installs. > > Rinternals.h has > > #ifdef LONG_VECTOR_SUPPORT > typedef ptrdiff_t R_xlen_t; > typedef struct { R_xlen_t lv_length, lv_truelength; } R_long_vec_hdr_t; > # define R_XLEN_T_MAX 4503599627370496 > # define R_SHORT_LEN_MAX 2147483647 > # define R_LONG_VEC_TOKEN -1 > #else > typedef int R_xlen_t; > # define R_XLEN_T_MAX R_LEN_T_MAX > #endif > > while robustbase has > > #ifndef LONG_VECTOR_SUPPORT > # ifndef XLENGTH > // for R <= 2.15.x : > # define XLENGTH(x) LENGTH(x) > typedef int R_xlen_t; > # endif > #endif > > It seems the problem is that I have > > #define SIZEOF_SIZE_T 4 > > in my config.log , which in turn turns off LONG_VECTOR_SUPPORT, which is > otherwise (?) assumed only to be true for R<=2.15.x ... can this be > because I'm on 32-bit Linux , or on old linux with gcc 4.4.3, or ... ? > <http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models> > > Can anyone confirm/enlighten me? > > cheers > Ben Bolker > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >
Reasonably Related Threads
- R_xlen_t is an integer type
- scan(..., skip=1e11): infinite loop; cannot interrupt
- Unexpected behavior when using macro to loop over vector
- Unexpected behavior when using macro to loop over vector
- sum(..., na.rm=FALSE): Summing over NA_real_ values much more expensive than non-NAs for na.rm=FALSE? Hmm...