From: Paul <pau...@af...> - 2012-01-09 10:46:59
|
Hi, Thanks once again to all for so much feedback. > > I need to distribute pthreadGC.dll with my app, which I can't find. > > What gives? > > Mine is in the 'mingw/bin' folder. Yours should be there too. Sorry, pthreadGC2.dll is there, but no pthreadGC.dll, which the pthreads-win32 announcement (http://sourceware.org/pthreads-win32/announcement.html) says I need. Then again, looking at the pthreads-win32 download files, it also has a pthreadGC2.dll, so I'm guessing it's just a mistake in the announcement. Alessandro wrote: > What I did mean is using `-mthreads' should add `-lpthread' > automatically. Earnie wrote: > No it doesn't. -mthreads adds -lmingwthrd and defines _MT. > > If you want to use -lpthread you have to add it specifically and do > not use -mthreads. That said, I don't know much more than that but > -lmingwthrd was created for thread safety and exception handling for > Windows thread model. The -lpthread is not in the specs when you gcc > -dumpspecs and the specs is the clue as to what command line options > GCC adds to the sub-processes. Fredric wrote: > -mthreads does not and should not add -lpthread when linking. Using > the option -mthreads doesn't necessarily imply that you are using > pthreads, since the option also is used with windows threads for > reasons other have mentioned earlier Just to confirm I understand the process, when you do a #include, it searches for the header file, which is parsed essentially as if it had been typed out at that point. This declares the function calls, which then need definitions. Those definitions either come from your own source files, that you compile and then link in, or pre-compiled libraries that you just link in, in either case by using the -l or -L option to gcc. So if there is a #include <pthreads.h> then there must be a -lpthread as well, otherwise it will include the header, but not find the function definitions, right? Well, then it must be in the make file somewhere, though I can't seem to find it. As far as I can tell, it is happy with just the include, so either my understanding is lacking, or I'm missing it in the makefiles. > `-mthreads' is mandatory because instructs GCC to tune > Windows SDK headers to use the multi threaded version of the run time > library (msvcrt{*}.dll). Also the linker will use the appropriate > library archive (msvcrt{*}.a). Ah, thanks, ok, so one piece of the puzzle sorted. > If you want to use -lpthread you have to add it specifically and do > not use -mthreads. I'm not sure why you say this, can you explain? Surely you need both, as stated above? > Well, I can't tell you that. I don't have a Linux box so I don't > know. But I think that a good choice would be '__CLEANUP_C' (uses > setjmp/longjmp) because it is supported in almost all platforms. Thanks. I'll keep trying to figure this out, maybe *somewhere* in the man pages on my linux box I'll find the answer... Paul |