From: Simon de G. <s.d...@tu...> - 2010-02-25 14:01:15
|
Hello, I am working under opensuse and cross compiling for 64 bits Windows. I cannot compile the gmp library because mp_limb_t is 32 bits, because of the 32 bit long type. I have tried to use the -m64 option but it does not work. Why can a long integer not be set to 64 bits? I have used the binary package from source froge. Must i maybe download the source package and compile to cross-compiler myself to get this behaviour? |
From: Ozkan S. <se...@gm...> - 2010-02-25 14:08:42
|
On Thu, Feb 25, 2010 at 4:01 PM, Simon de Graaf <s.d...@tu...> wrote: > Hello, > > I am working under opensuse and cross compiling for 64 bits Windows. > I cannot compile the gmp library because mp_limb_t is 32 bits, because of > the 32 bit long type. I have tried to use the -m64 option but it does > not work. > Why can a long integer not be set to 64 bits? > I have used the binary package from source froge. > Must i maybe download the source package and compile to cross-compiler > myself > to get this behaviour? Is this gmp.4.3? The 4.3 series need a patch to compiling for win64 (see our files page, under mingw-w64 -> toolchain patches; gmp-5.0.x does not need a patch.) Then you should configure it with --host=x64_64-w64-mingw32. -- Ozkan |
From: Kai T. <kti...@go...> - 2010-02-25 14:09:08
|
2010/2/25 Simon de Graaf <s.d...@tu...>: > Hello, > > I am working under opensuse and cross compiling for 64 bits Windows. > I cannot compile the gmp library because mp_limb_t is 32 bits, because of > the 32 bit long type. I have tried to use the -m64 option but it does > not work. the variant provide in our source packages if for building of gcc only (along with mpfrr and mpc). We use in-tree build here. > Why can a long integer not be set to 64 bits? > I have used the binary package from source froge. > Must i maybe download the source package and compile to cross-compiler > myself > to get this behaviour? Well, the size of type 'long' we can change here. It is part of MS decission of ABI. For native win32 world, the type 'long' is 32-bit wide. Therefore for 64-bit Windows, you have to use 'long long' type to have the scalar width of a pointer. But in general it is better to use intptr_t/uintptr_t types for any platform you are programming for, as those types abstract this issue in a standarized way. Regards, Kai -- | (\_/) This is Bunny. Copy and paste | (='.'=) Bunny into your signature to help | (")_(") him gain world domination |
From: Tor L. <tm...@ik...> - 2010-02-25 14:11:32
|
> Why can a long integer not be set to 64 bits? Because long is32 bits in the 64-bit Windows ABI, and in also 64-bit C libraries on Windows. And this is fully legal from a C language point of view. Any code that pretends to be portable but assumes long is 64 bits is simply broken. Code should use an appropriate portable way to get an integer type guaranteed to be 64 bits if it needs one, like either use a suitably complex configure script or similar, or use int64_t from <stdint.h>. Are you sure you haven't simply misconfigured gmp? > Must i maybe download the source package and compile to cross-compiler myself to get this behaviour? You could, but your compiler would then generate code that would be incompatible with the headers for the Microsoft C library, so you would have to modify those, too. (Or write your own C library...) --tml |