Proposal: winpthreads support for Fedora 20
Erik van Pienbroek
erik at vanpienbroek.nl
Tue Apr 30 00:04:47 UTC 2013
NightStrike schreef op ma 29-04-2013 om 05:27 [-1000]:
> I still am baffled why this target would default the pthread linking
> option to always on, even when -pthread is not specified. This seems
> like an upstream gcc bug.
I just did some testing with a winpthreads-based toolchain to find out
more about what rumors are true and which ones are bogus. Here are my
conclusions so far:
* When gcc is built with --enable-threads=posix then it causes
libgcc_s_sjlj-1.dll (win32), libgcc_s_seh-1.dll (win64) and
libstdc++-6.dll to start depending on libwinpthread-1.dll
* A simple 'hello world' written in C and compiled with gcc does
NOT have additional dependencies other than native win32 dlls
* A simple 'hello world' written in C and compiled with g++ does
depend on libgcc_s_sjlj-1.dll/libgcc_s_seh-1.dll and therefore
also depends on libwinpthread-1.dll
* A simple 'hello world' written in C++ and compiled with g++
depends on both libgcc_s_sjlj-1.dll / libgcc_s_seh-1.dll and
libstdc++-6.dll. Both also depend on libwinpthreads-1.dll
So we can conclude that pure C programs build fine without introducing
an additional dependency on libwinpthreads-1.dll.
When your program already depends on either libgcc_s_sjlj-1.dll /
libgcc_s_seh-1.dll or libstdc++-6.dll then it will automatically have a
additional dependency on libwinpthreads-1.dll even when your program
doesn't use posix threads.
In Fedora we've currently got 142 binary RPMs which depend on
libgcc_s_sjlj-1.dll (win32) and 45 binary RPMs which depend on
libgcc_s_seh-1.dll (win64). Once we flip the switch on the gcc side it
will cause all these packages to have an additional dependency on
libwinpthreads-1.dll.
I don't know if it is possible to teach gcc to have the
libgcc_s_sjlj-1.dll / libgcc_s_seh-1.dll and libstdc++-6.dll libraries
only depend on libwinpthread-1.dll when '-pthread' is given (perhaps
using delay-load or something similar). That question would have to be
asked to people who are more familiar with the gcc internals.
Regards,
Erik van Pienbroek
More information about the mingw
mailing list