This is the mail archive of the
cygwin@sourceware.cygnus.com
mailing list for the Cygwin project.
Re: linking gcc & vc++ object files
- To: dyoung at vviuh221 dot vvi dot com, gnu-win32 at cygnus dot com
- Subject: Re: linking gcc & vc++ object files
- From: "139a80000-HallM(DR3132)37x10" <marcus at bighorn dot dr dot lucent dot com>
- Date: Mon, 3 Aug 1998 08:40:20 -0600 (MDT)
- Reply-To: "139a80000-HallM(DR3132)37x10" <marcus at bighorn dot dr dot lucent dot com>
David Young asks:
> We are linking object files generated by gcc and object files
> generated by vc++ on Windows-NT. In order to get object files
> generated by gcc to link with object files generated by VC++ we have
> to append a "@n" suffix (n seems to be always a multiple of 4) to the
> function names (in the gcc related source files) whos object
> definition is in the files generated by VC++. That's because the VC++
> generates function symbols in object files with a "@n" suffix. Note,
> this has nothing to do with C++ name mangling, all function
> definitions are wrapped in extern "C" {} ; this is an ANSI-C related
> issue.
>
> QUESTION: What is the "@n" all about?
This is just the first hurdle...
The @nn suffix means that the routine is compiled for "stdcall" calling
procedures. That is, the callee pops the arguments off of the stack. The
number after the `@' is the number of bytes that are popped off of the stack.
The other option (without the `@' suffix) is a caller-pops convention "cdecl"
type. Depending on how various flags are set for VC++, it will default to
one or the other standards. You can force a routine to be treated (either
in a function definition or external declaration) a particular way by adding
"stdcall" or "cdecl" to the function type specifier. You really need to
make the functionality match, not just the name.
So, if you declare a function thusly:
stdcall int func(int a, char *b) { /* some code */ }
gcc should generate a callee pops function popping 8 bytes of arguments from
the stack named "func@8".
--
marcus hall
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".