generic way to access C++ libs?
Jorgen Grahn
jgrahn-nntq at algonet.se
Sat Nov 13 04:23:09 EST 2004
On Thu, 11 Nov 2004 12:07:57 GMT, Neil Hodgson <nhodgson at bigpond.net.au> wrote:
> Neil Hodgson:
>
> # Much of the time C++ code only has to be compatible with the other
> # modules it is delivered with.
>
>
> Jorgen Grahn:
>
>> But most of the time it has to be compatible with the standard library.
>>
>> Even if these flags exist, I think it's very rare to encounter more than
> one
>> layout, for one specific compiler/compiler version/architecture.
>
> The most commonly changed layout option is structure packing. Many C/C++
> projects decide upon a particular packing option often just to be compatible
> with files from the initial version or other applications and libraries.
>
> [...] C system libraries like standard I/O and platform
> libraries like Win32 use explicit compiler instructions to ensure they can
> deal with client option choice. The Win32 headers use #pragma pack(n) to
> ensure that client code will compile assuming particular packing of system
> structures no matter how the client code is packing its own structures.
...
I see. Then this seems to me to be a Windows culture issue which I've missed
because I'm a Unix person. The GNU and Solaris libcs (and all other Unix
shared libraries that I'm aware of) do not do this. Same thing with
AmigaDOS, as I recall it. Access these from code compiled with non-standard
packing and you're toast.
(Some Unix include files (things in /usr/include/netinet/, for example) have
structs with elaborate padding so that they can match e.g. an IP header
perfectly. This places a restriction on compiler writers, of course.)
That also explains to me why so many embedded projects I've been in have
messed with structure packing - the architects were Windows people.
One reason this is rare in the non-Windows world is (I suppose) that there's
often a huge run-time penalty for accessing misaligned words on non-x86
processors. The default layout is almost always the best possible, unless
you are low on memory.
/Jörgen
--
// Jorgen Grahn <jgrahn@ Ph'nglui mglw'nafh Cthulhu
\X/ algonet.se> R'lyeh wgah'nagl fhtagn!
More information about the Python-list
mailing list