From: David C. <da...@ar...> - 2006-11-16 02:40:14
|
Hi, This is a bit OT, but I wasted quite some time on this time, when using 64 bits integers and ctypes on ubuntu edgy. As I know other people use ubuntu with numpy, this may save some headache to others. I found this behaviour which looks like a bug in ctypes for python2.5 on edgy ubuntu: python2.5 -c "from ctypes import sizeof, c_longlong; print sizeof(c_longlong)" prints 4 instead of 8, which in my case is problematic for structures alignement. This affects only python2.5, and does not affect a python installed from sources. Can anybody else reproduce this ? cheers, David |
From: Robert K. <rob...@gm...> - 2006-11-16 03:22:55
|
David Cournapeau wrote: > Hi, > > This is a bit OT, but I wasted quite some time on this time, when > using 64 bits integers and ctypes on ubuntu edgy. As I know other people > use ubuntu with numpy, this may save some headache to others. I found > this behaviour which looks like a bug in ctypes for python2.5 on edgy > ubuntu: > > python2.5 -c "from ctypes import sizeof, c_longlong; print > sizeof(c_longlong)" > > prints 4 instead of 8, which in my case is problematic for > structures alignement. This affects only python2.5, and does not affect > a python installed from sources. Can anybody else reproduce this ? Can you try a similar program in C compiled with the same C compiler that you used to build ctypes? sizeof(long long) does not have to be 8 bytes; it just has to be at least as large as sizeof(long). -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco |
From: David C. <da...@ar...> - 2006-11-16 03:46:24
|
Robert Kern wrote: > David Cournapeau wrote: > >> Hi, >> >> This is a bit OT, but I wasted quite some time on this time, when >> using 64 bits integers and ctypes on ubuntu edgy. As I know other people >> use ubuntu with numpy, this may save some headache to others. I found >> this behaviour which looks like a bug in ctypes for python2.5 on edgy >> ubuntu: >> >> python2.5 -c "from ctypes import sizeof, c_longlong; print >> sizeof(c_longlong)" >> >> prints 4 instead of 8, which in my case is problematic for >> structures alignement. This affects only python2.5, and does not affect >> a python installed from sources. Can anybody else reproduce this ? >> > > Can you try a similar program in C compiled with the same C compiler that you > used to build ctypes? sizeof(long long) does not have to be 8 bytes; it just has > to be at least as large as sizeof(long). > > I thought that ISO C99 required long long to be at least 64 bits, and that gcc followed this by default: #include <stdio.h> int main(void) { printf("size of long long is %d\n", sizeof(long long)); return 0; } compiled by gcc with -W -Wall, returns 8. Gcc is edgy ubuntu, that is 4.1.2. I tried also with gcc 3.3 and 4.0, same result. Also, something I didn't say is that c_int64 is not available from ctypes; with python2.4, this is fine (I changed my code to use c_int64 instead: an import error is much easier to find than a structure alignement problem when using ctypes :) ). Also, I insist on this point, installing python from sources returns 8, as does python2.4 packaged by ubuntu (which is compiled by the exact same compiler according to python prompts). I am now trying to see if this is coming from configuration options (now, I know what a dual cpu is useful for: compiling python with make -j5 is really fast:) ), cheers, David |
From: David C. <da...@ar...> - 2006-11-16 03:55:17
|
David Cournapeau wrote: > Robert Kern wrote: > >> David Cournapeau wrote: >> >> >>> Hi, >>> >>> This is a bit OT, but I wasted quite some time on this time, when >>> using 64 bits integers and ctypes on ubuntu edgy. As I know other people >>> use ubuntu with numpy, this may save some headache to others. I found >>> this behaviour which looks like a bug in ctypes for python2.5 on edgy >>> ubuntu: >>> >>> python2.5 -c "from ctypes import sizeof, c_longlong; print >>> sizeof(c_longlong)" >>> >>> prints 4 instead of 8, which in my case is problematic for >>> structures alignement. This affects only python2.5, and does not affect >>> a python installed from sources. Can anybody else reproduce this ? >>> >>> >> Can you try a similar program in C compiled with the same C compiler that you >> used to build ctypes? sizeof(long long) does not have to be 8 bytes; it just has >> to be at least as large as sizeof(long). >> >> >> > I thought that ISO C99 required long long to be at least 64 bits, and > that gcc followed this by default: > Ok, I found the problem: python 2.5 is configured with the option --with-system-ffi. If I compile python2.5 original sources with this option, I have the same problem, so it looks like a ffi-related problem. I will investigate this, because this is really annoying, but this has nothing to do with python nor numpy anymore, cheers, David |