> Date: Sun, 9 Nov 2014 23:30:07 -0500 > From: jeremy chen <[email protected]> > > Hi, I am trying to compile guile on windows with Mingw-w64. > The file libguile/numbers.c signal an error in this function: > > static SCM > scm_i_inum2big (scm_t_inum x) > { > /* Return a newly created bignum initialized to X. */ > SCM z = make_bignum (); > #if SIZEOF_VOID_P == SIZEOF_LONG > mpz_init_set_si (SCM_I_BIG_MPZ (z), x); > #else > /* Note that in this case, you'll also have to check all mpz_*_ui and > mpz_*_si invocations in Guile. */ > #error creation of mpz not implemented for this inum size > #endif > return z; > } > > sizeof(void*) is 8 and sizeof(long) is 4 on my machine. > Anyway to get around this? Thanks.
This is a bug in Guile: it assumes the LP64 data model, where both 'long' and a pointer are 64-bit wide. But 64-bit Windows uses the LLP64 model, where 'long' is a 32-bit data type, and the 64-bit integer data type is 'long long' or '__int64'. You need to fix Guile to support the LLP64 model, at least in this module, and probably elsewhere as well.
