Katana Steel writes:
>
> I wonder why; when I compile a C++ file with a header which looks like this:
> #ifndef __headername_h
> #define __headername_h 1
>
> #ifdef __cplusplus
>
> extern "C" void function1(int,char*,int);
> extern "C" void function2(int,char*,int);
>
> #endif
>
> #endif
>
> under x86 & x64 linux this creates the symbols (output from nm):
> U function1
> U function2
> and using cygwin & mingw (x86) it creates these symbols (output from nm):
> U _function1
> U _function2
>
> is there a good reason for this?
The ABI says so. The ABI allows programs generated by different tools
to be linked together: it doesn't really matter what the convention
is, as long as everyone on a particular platform agrees.
The "_" prefix is in fact an old UNIX convention that was IIRC dropped
by UNIX System V when it went over to ELF format binaries.