This is the mail archive of the
mailing list for the pthreas-win32 project.
Re: pthread library static linking
- From: Ross Johnson <rpj at callisto dot canberra dot edu dot au>
- To: Meno Abels <meno dot abels at adviser dot com>
- Cc: pthreads-win32 at sources dot redhat dot com
- Date: Fri, 23 Apr 2004 17:35:34 +1000
- Subject: Re: pthread library static linking
- References: <4088AD69.firstname.lastname@example.org>
- Reply-to: rpj at callisto dot canberra dot edu dot au
One reason, and possibly the only reason, is that pthreads-win32 allows
Win32 threads (those not started via pthread_create) to call pthreads
routines. But to do this usually generates an on-the-fly pthread handle
for the Win32 thread so that it can be managed. Effectively, any Win32
thread that calls a pthreads routine becomes a POSIX (DETACHED) thread
from the library's point of view. The hooks in dllMain enable cleanup of
these 'implicit' pthread handles because the library has no other way of
knowing when they exit.
The routines that dllMain calls were split out and are exported so that
they could be called in statically linked applications. See dllMain.c
Now, I could be wrong, but if Win32 threads never call pthreads routines
then your statically linked application may not need to explicitly call
these dllMain hooks. Threads created via pthread_create should be
getting cleaned up at the end of ptw32_threadStart(). You could try it,
but check for memory leaks.
Meno Abels wrote:
i'am new here so one question is allowed-:)
I want to use pthread-win32 not as a dll. I want
to link the pthread-win32 functionality static
to my application just to make distribution of that
So that is quite easy to get, but there are the DllMain.
In DllMain you use the DLL_THREAD_ATTACH/DLL_THREAD_DETACH.
These prevents to use your lib static linked. Not technical
but functional. The DLL_PROCESS_ATTACH/DETACH is simple to
simulate infact I will call it on startup and end of my
application direct. The thread stuff is more complex i have to
change the thread create and thread exit code of your library.
My basic question is why you choose this solution with
DllMain. The pthread library is a wrapper around the
windows functions so it would be obvious to add the needed
initialisation for the create and exit directly.
Why is this done with DllMain?
Thanks in advance