Bzip2 / name mangling / C libs for kdewin32
Christian Ehrlicher
Ch.Ehrlicher at gmx.de
Wed Apr 11 19:40:51 CEST 2007
Hi,
I think there is an interest what went wrong with the recent bzip2
package, so I'll try to explain. Please ask if you don't understand
something.
When you want to export a C function called 'foo', you can decorate it
with 'extern __cdecl'. This produces the symbol '_foo'. __cdecl is the
default for msvc afaik.
--> http://msdn2.microsoft.com/en-us/library/zkwh89ks.aspx
Another way to export a function on win32 is to define it with 'extern
__stdcall'. Then the symbol is named '_foo at xx' where xx is the number of
arguments * 4
--> http://msdn2.microsoft.com/en-us/library/zxk0tw93.aspx
And the last option is to use declspec(dllexport) which produce the
symbol '__imp_foo'. dllexport can be combined with the two above. In
this case, two symbols are created for the export lib and both point to
the same function.
The problem with bzip2 was, that __stdcall is used and foo at xx is
created. The cmake check for a symbol name uses 'extern foo' and
therefore the linker is looking for '_foo'.
--> Because of this, bzlib.h is patched (in the same way gnuwin32 does
it to be compatible) -> '_foo' and '__imp_foo' symbols are created and
the check works fine.
Now to the problem with different libs for mingw/msvc/debug/release.
A C-only lib can be used by mingw & msvc without any problems so there
is no need to distinguish between compilers for them. And creating an
extra debug lib is also not needed because imo nobody wants to debug a
3rdparty - lib without recompiling it with current sources and the
favorite compiler he's using. Using different libs would also mean to
change all cmake scripts. And it would add more confusion about the
needed libs.
Christian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 250 bytes
Desc: OpenPGP digital signature
Url : http://mail.kde.org/pipermail/kde-windows/attachments/20070411/d7192b74/attachment.pgp
More information about the Kde-windows
mailing list