MinGW's GCC and __attribute__((weak))

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

MinGW's GCC and __attribute__((weak))

Andrew Pennebaker
I love how you can bundle a framework and CLI in the same Perl script, by using unless(caller) { main; }. For lack of a better name, I've started calling this behavior scriptedmain.

I want to be able to do the same thing in C, and with help from StackOverflow I've gotten working C code to do just that, in Unix. Unfortunately, the C code doesn't compile in Windows, because gcc/MinGW and gcc/Strawberry Perl fail to recognize __attribute__((weak)) syntax. Is there another way I can rewrite my code for MinGW's gcc so that it compiles and works like the Perl scriptedmain? Or can we add __attribute__((weak)) to MinGW's gcc lexicon?

I will also be asking the Strawberry Perl project about their gcc in case some minor configuration tweak can get this working.

Cheers,

Andrew Pennebaker

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe
LRN
Reply | Threaded
Open this post in threaded view
|

Re: MinGW's GCC and __attribute__((weak))

LRN
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13.09.2012 0:03, Andrew Pennebaker wrote:
> I love how you can bundle a framework and CLI in the same Perl
> script, by using unless(caller) { main; }. For lack of a better
> name, I've started calling this behavior
> scriptedmain<https://github.com/mcandre/scriptedmain/tree/master/perl>
>
>
.
>
> I want to be able to do the same thing in C, and with help from
> StackOverflow I've gotten working C code to do just that, in Unix.
> Unfortunately, the C
> code<http://stackoverflow.com/questions/12395130/trouble-using-scriptedmain-in-mingw>
>
>
doesn't
> compile in Windows, because gcc/MinGW and gcc/Strawberry Perl fail
> to recognize __attribute__((weak)) syntax. Is there another way I
> can rewrite my code for MinGW's gcc so that it compiles and works
> like the Perl scriptedmain? Or can we add __attribute__((weak)) to
> MinGW's gcc lexicon?
>
> I will also be asking the Strawberry Perl project about their gcc
> in case some minor configuration tweak can get this working.
>
See [1].


[1]
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#index-g_t_0040code_007bweak_007d-attribute-2675



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQUQCrAAoJEOs4Jb6SI2CwU/wH/1egGOG5AuV8JHmuFHmdo6V8
GvyHAKDTMhe68jw1i2xvEMGUZ68ic4AwI1E6XN5N1DQGL77GThEuSolJZM4NbjR6
qxWitfv0PxH1djEhlD2Yl2eEtxWfjJtsgxGUUUyag5+I435oUt+YfklSeQNetRy5
gefn2HY8wGpH5Q3ySOSgsF9F10lRTSpUJlZIkztR1UeuGggPgjficLNvOGDnlJCY
D8yt1qMTKpB/5+2Q1ZjztTYoyK/lcWFR3CxDV6/zcwMlV/H2FruVad4aq26YBTst
fHTSICYFRF5Owv+wqvyT0/OAEhEa9EzI+QwsNqUuIh5sWziCvBzGOjmD1xapMsE=
=FRs3
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe
Reply | Threaded
Open this post in threaded view
|

Re: MinGW's GCC and __attribute__((weak))

Andrew Pennebaker
Thanks for supplying a hyperlink to __attribute__ documentation, but how does that answer my question?

I try using combinations of #pragma weak, _Pragma weak, and __declspec(weak) to achieve the same effect as __attribute__((weak)) with GCC/MinGW in Windows, but none of them compile.

Cheers,

Andrew Pennebaker
www.yellosoft.us


On Wed, Sep 12, 2012 at 5:37 PM, LRN <[hidden email]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 13.09.2012 0:03, Andrew Pennebaker wrote:
>> I love how you can bundle a framework and CLI in the same Perl
>> script, by using unless(caller) { main; }. For lack of a better
>> name, I've started calling this behavior
>> scriptedmain<https://github.com/mcandre/scriptedmain/tree/master/perl>
>>
>>
> .
>>
>> I want to be able to do the same thing in C, and with help from
>> StackOverflow I've gotten working C code to do just that, in Unix.
>> Unfortunately, the C
>> code<http://stackoverflow.com/questions/12395130/trouble-using-scriptedmain-in-mingw>
>>
>>
> doesn't
>> compile in Windows, because gcc/MinGW and gcc/Strawberry Perl fail
>> to recognize __attribute__((weak)) syntax. Is there another way I
>> can rewrite my code for MinGW's gcc so that it compiles and works
>> like the Perl scriptedmain? Or can we add __attribute__((weak)) to
>> MinGW's gcc lexicon?
>>
>> I will also be asking the Strawberry Perl project about their gcc
>> in case some minor configuration tweak can get this working.
>>
> See [1].
>
>
> [1]
> http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#index-g_t_0040code_007bweak_007d-attribute-2675
>
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (MingW32)
> Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
>
> iQEcBAEBAgAGBQJQUQCrAAoJEOs4Jb6SI2CwU/wH/1egGOG5AuV8JHmuFHmdo6V8
> GvyHAKDTMhe68jw1i2xvEMGUZ68ic4AwI1E6XN5N1DQGL77GThEuSolJZM4NbjR6
> qxWitfv0PxH1djEhlD2Yl2eEtxWfjJtsgxGUUUyag5+I435oUt+YfklSeQNetRy5
> gefn2HY8wGpH5Q3ySOSgsF9F10lRTSpUJlZIkztR1UeuGggPgjficLNvOGDnlJCY
> D8yt1qMTKpB/5+2Q1ZjztTYoyK/lcWFR3CxDV6/zcwMlV/H2FruVad4aq26YBTst
> fHTSICYFRF5Owv+wqvyT0/OAEhEa9EzI+QwsNqUuIh5sWziCvBzGOjmD1xapMsE=
> =FRs3
> -----END PGP SIGNATURE-----
>
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and
> threat landscape has changed and how IT managers can respond. Discussions
> will include endpoint security, mobile security and the latest in malware
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> MinGW-users mailing list
> [hidden email]
>
> This list observes the Etiquette found at
> http://www.mingw.org/Mailing_Lists.
> We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.
>
> _______________________________________________
> You may change your MinGW Account Options or unsubscribe at:
> https://lists.sourceforge.net/lists/listinfo/mingw-users
> Also: mailto:[hidden email]?subject=unsubscribe


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe
LRN
Reply | Threaded
Open this post in threaded view
|

Re: MinGW's GCC and __attribute__((weak))

LRN
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13.09.2012 1:58, Andrew Pennebaker wrote:
> Thanks for supplying a hyperlink to __attribute__ documentation,
> but how does that answer my question?
>
> I try using combinations of #pragma weak, _Pragma weak, and
> __declspec(weak) to achieve the same effect as
> __attribute__((weak)) with GCC/MinGW in Windows, but none of them
> compile.
>
Let me quote contents of that page then:
weak
    The weak attribute causes the declaration to be emitted as a weak
symbol rather than a global. This is primarily useful in defining
library functions which can be overridden in user code, though it can
also be used with non-function declarations. Weak symbols *are
supported for ELF targets, and also for a.out targets when using the
GNU assembler and linker*.

Now, are you compiling to ELF or a.out?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQUQoAAAoJEOs4Jb6SI2CwtNUIAJFdolKPXjHxiKePQo4pOdHR
BI/X38zd38oWY5xFfj65tMBcpiazYcvQfXSgVl+0Szuuv7hGsup7CLqv0a5BfjSc
Tou7PYOWglnboN1NvodrZ+7KMrwj8FkkmNmt8CRNpjWE1kZUrirsZYyC6bSlo88U
ZAav3n/h6hxYYjvbnA13UsEg3L1kLZN9qKhcU8+U0AJh4KCbnULEJQwnOu6dg1Lu
OUzet/RjwuDEiUSzFw96TruvDlXIKdcXtkvlDGt7nRtFmkd3M9+U0Cqr5/M8EsSV
G6yG97ghJTngk3WRs/rW8FwB0dVhdzUsNMoTr/95fwk6sKbGH6L0tnhBZ+ksQdY=
=xcjf
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe
Reply | Threaded
Open this post in threaded view
|

Re: MinGW's GCC and __attribute__((weak))

Andrew Pennebaker
I'm not compiling to ELF; I'm using GCC in Windows to compile to a Windows PXE, an exe binary executable file. Is there a way to effectively duplicate __attribute__((weak)) when compiling to a Windows executable?

Cheers,

Andrew Pennebaker

On Wed, Sep 12, 2012 at 6:17 PM, LRN <[hidden email]> wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13.09.2012 1:58, Andrew Pennebaker wrote:
> Thanks for supplying a hyperlink to __attribute__ documentation,
> but how does that answer my question?
>
> I try using combinations of #pragma weak, _Pragma weak, and
> __declspec(weak) to achieve the same effect as
> __attribute__((weak)) with GCC/MinGW in Windows, but none of them
> compile.
>
Let me quote contents of that page then:
weak
    The weak attribute causes the declaration to be emitted as a weak
symbol rather than a global. This is primarily useful in defining
library functions which can be overridden in user code, though it can
also be used with non-function declarations. Weak symbols *are
supported for ELF targets, and also for a.out targets when using the
GNU assembler and linker*.

Now, are you compiling to ELF or a.out?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQUQoAAAoJEOs4Jb6SI2CwtNUIAJFdolKPXjHxiKePQo4pOdHR
BI/X38zd38oWY5xFfj65tMBcpiazYcvQfXSgVl+0Szuuv7hGsup7CLqv0a5BfjSc
Tou7PYOWglnboN1NvodrZ+7KMrwj8FkkmNmt8CRNpjWE1kZUrirsZYyC6bSlo88U
ZAav3n/h6hxYYjvbnA13UsEg3L1kLZN9qKhcU8+U0AJh4KCbnULEJQwnOu6dg1Lu
OUzet/RjwuDEiUSzFw96TruvDlXIKdcXtkvlDGt7nRtFmkd3M9+U0Cqr5/M8EsSV
G6yG97ghJTngk3WRs/rW8FwB0dVhdzUsNMoTr/95fwk6sKbGH6L0tnhBZ+ksQdY=
=xcjf
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe
Reply | Threaded
Open this post in threaded view
|

Re: MinGW's GCC and __attribute__((weak))

Andrew Pennebaker
I found a solution for hiding main() that works in Windows and Unix, using simple preprocessor instructions.


Cheers,

Andrew Pennebaker

On Wed, Sep 12, 2012 at 7:16 PM, Andrew Pennebaker <[hidden email]> wrote:
I'm not compiling to ELF; I'm using GCC in Windows to compile to a Windows PXE, an exe binary executable file. Is there a way to effectively duplicate __attribute__((weak)) when compiling to a Windows executable?

Cheers,

Andrew Pennebaker

On Wed, Sep 12, 2012 at 6:17 PM, LRN <[hidden email]> wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13.09.2012 1:58, Andrew Pennebaker wrote:
> Thanks for supplying a hyperlink to __attribute__ documentation,
> but how does that answer my question?
>
> I try using combinations of #pragma weak, _Pragma weak, and
> __declspec(weak) to achieve the same effect as
> __attribute__((weak)) with GCC/MinGW in Windows, but none of them
> compile.
>
Let me quote contents of that page then:
weak
    The weak attribute causes the declaration to be emitted as a weak
symbol rather than a global. This is primarily useful in defining
library functions which can be overridden in user code, though it can
also be used with non-function declarations. Weak symbols *are
supported for ELF targets, and also for a.out targets when using the
GNU assembler and linker*.

Now, are you compiling to ELF or a.out?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQUQoAAAoJEOs4Jb6SI2CwtNUIAJFdolKPXjHxiKePQo4pOdHR
BI/X38zd38oWY5xFfj65tMBcpiazYcvQfXSgVl+0Szuuv7hGsup7CLqv0a5BfjSc
Tou7PYOWglnboN1NvodrZ+7KMrwj8FkkmNmt8CRNpjWE1kZUrirsZYyC6bSlo88U
ZAav3n/h6hxYYjvbnA13UsEg3L1kLZN9qKhcU8+U0AJh4KCbnULEJQwnOu6dg1Lu
OUzet/RjwuDEiUSzFw96TruvDlXIKdcXtkvlDGt7nRtFmkd3M9+U0Cqr5/M8EsSV
G6yG97ghJTngk3WRs/rW8FwB0dVhdzUsNMoTr/95fwk6sKbGH6L0tnhBZ+ksQdY=
=xcjf
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe



------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe
LRN
Reply | Threaded
Open this post in threaded view
|

Re: MinGW's GCC and __attribute__((weak))

LRN
In reply to this post by Andrew Pennebaker
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13.09.2012 3:16, Andrew Pennebaker wrote:


Do not top-post, please. Also try to trim the mail footer. It would
also be nice if you refrain from showing people's e-mail address when
quoting.

Now, first: Wikipedia tells me that weak symbols are not part of the
standard, and thus are not portable. That's one reason not to use them.

Second, from what i understand, weak symbols are used to weakly link
together multiple object files, i.e. you can, in one object file,
declare external weak function, and then check in its code (at
runtime) that function pointer is non-NULL, and use it. Presence of
the function depends on whether some other object file in that binary
defined this function. You can also actually define this weak function
(so it will always be non-NULL), and non-weak definition, if defined,
will override the weak one. Which is what you are doing.
Now, i'm not sure how useful it is. It seems to be, from a cursory
inspection, that you can define a global variable of the right type,
and put function pointer into it at initialization time (using a
constructor function). This will have the same effect: instead of
multiple definitions of the same function, from which only the strong
one will be linked in, you have multiple different compatible
functions, and which one is used is defined at runtime by the
constructor (and the user can still check that global variable is not
NULL before using it).

In your case you use it in the other way. It seems that you want to be
able to compile a binary with basic set of source files, and get a
working executable (with main()), and to be able to compile it with
extra source file(s), which override weak functions from the base set,
so that their functions (in particular - main()) will be used instead.
This is a neat trick, but can be easily replicated with static
libraries - put all functionality into a static library, and leave
main() to the executable. The only difference will be that you will
have to link static library in separate step, and link the executable
to it.

You mentioned Python's if __name__ == '__main__', but that's
practically the same concept: separate API from the UI (in this case
"UI" is console-based; input is the fact that the program is started,
output is whatever it prints or does). Portable C equivalent in Python
would be to have a separate file that only has the code for the
program UI, and just imports the package with actual code and runs a
function from it.

Also related: on Windows (at least) you can to dynamically link
executable files as if they were shared libraries. That is, nothing
prevents you from attaching a main() to your API to be able to run it
as if it was a program. However, there's a catch: if you compile API
with --shared, it won't run (which was kind of the point), but
executable will link it perfectly (since it's a normal dll). If you
compile API without --shared, it will run, and executable will link
it, and will work, but neither constructors/destructors, nor DllMain()
will be called in dll (and if you run dll itself, it will only run
constructors/destructors, and not DllMain(), obviously).

I've attached some examples, link them with:
gcc -Wl,--export-all-symbols -g -O0 sharedlibrary.c -o sharedlibrary.exe
pexports sharedlibrary.exe > sharedlibrary.def
dlltool --input-def sharedlibrary.def --export-all-symbols -l
libsharedlibrary.dll.a
gcc -g -O0 -I. executable.c -o executable.exe -L. -lsharedlibrary
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQUTqUAAoJEOs4Jb6SI2CwfqgIAMIYGYlrr8t8k7GTtgGmZDUu
0HcV49bV8ryHtZ4qOspJxgBbWYl3WTmzXdmzk/7ImPy5b1hSjaek0/rCl24KrQzv
enkHK42ciCP4Jsn2aF8UYtmgYj7UCviftMAtSNGC+QmwdPOwFLMMb887gzwqJ7fc
MLkp+Rh023IoXO99xCF754vdpKA2yb+NfbFwpIsbzpavj6nnwRBtmiKLd+TVkKz2
xQTfE/P7wgIBbCrezkAnymT0y7eotOqHXNPEUTPfpYfQQ7QePh5j7NH3+i1ejwnc
4KgEpXagp5jqirVUjCrfpa3xOk3LPCjjTHQ49lRdvoyYP/pXtm4cOKrT7ofCxRQ=
=ABcn
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
MinGW-users mailing list
[hidden email]

This list observes the Etiquette found at
http://www.mingw.org/Mailing_Lists.
We ask that you be polite and do the same.  Disregard for the list etiquette may cause your account to be moderated.

_______________________________________________
You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users
Also: mailto:[hidden email]?subject=unsubscribe

sharedlibrary.h (122 bytes) Download Attachment
sharedlibrary.c (1K) Download Attachment
executable.c (768 bytes) Download Attachment