This is the mail archive of the
pthreads-win32@sources.redhat.com
mailing list for the pthreas-win32 project.
mingw and pthreads help !
- To: <pthreads-win32 at sourceware dot cygnus dot com>
- Subject: mingw and pthreads help !
- From: Gabriel L Somlo <somlo at CS dot ColoState dot EDU>
- Date: Mon, 30 Apr 2001 10:57:49 -0600 (MDT)
Hi,
I am trying to compile an example c-program using pthread rwlocks on
Windows, using mingw gcc-2.95.2, the crtdll version (the msvcrt version
gives me the exact same problem). When I finish compiling, after some
warnings, and try to execute the .exe file, I get a popup error window
which says the "gcc.dll" file could not be found (this only happens with
the pthreads program -- a simple hello-world program compiles and executes
fine).
Also, if I don't define _MSC_VER I get a parse error when including
pthread.h
Can anyone please help me figure out what I'm doing wrong ?
Thanks,
Gabriel
PS. Here's what I've done:
I've unpacked all the pthread-w32 dll's, libraries, and include files into
a directory named c:\pthrw32, which is also added to the path of the shell
program used to start mingw (mingw32.bat):
REM
REM ...<snip>
REM
PATH=c:\gcc-2.95.2-crtdll\bin;%PATH%
REM add pthread dll directory to path variable
PATH=c:\pthrw32;%PATH%
REM start shell
cmd.exe
This is what I did in the resulting command window on Win2K:
E:\home\threads>gcc -D_REENTRANT -D_MSC_VER -O -Wall
-o thrtst thrtst.c -lpthreadw32 -Ic:\pthrw32 -Lc:\pthrw32
In file included from thrtst.c:14:
c:\pthrw32\pthread.h:1019: warning: `__except' redefined
c:\gcc-2.95.2-crtdll\bin\..\lib\gcc-lib\i386-mingw32\2.95.2\..
\..\..\..\i386-mingw32\include\excpt.h:9: warning: this is the location
of the previous definition
In file included from thrtst.c:14:
c:\pthrw32\pthread.h:204: warning: ignoring pragma: )
In file included from thrtst.c:14:
c:\pthrw32\pthread.h:284: warning: ignoring pragma: )
E:\home\threads>thrtst.exe
< popup window with message saying that gcc.dll could not be found >
Here is the silly pthread_rwlock example I'm trying to compile:
/*
* thrtst.c
*
* How to compile:
*
* On Solaris:
* gcc -D_REENTRANT -DSOL_SETCONC=4 -O -Wall -o thrtst thrtst.c -lpthread
*
* On Linux:
* gcc -D_REENTRANT -D_XOPEN_SOURCE=500 -O -Wall -o thrtst thrtst.c -lpthread
*
* On Windows (mingw32 - gcc-2.95.2-crtdll):
* gcc -D_REENTRANT -D_MSC_VER -O -Wall -o thrtst thrtst.c -lpthreadw32 \
* -Ic:\pthrw32 -Lc:\pthrw32
*/
#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
pthread_rwlock_t rwlock;
void *reader( void *arg ) {
unsigned long int i;
pthread_rwlock_rdlock( &rwlock );
fprintf( stderr, "--> %s starting to read\n", (char *)arg );
for( i = 0; i < 50000000; ++i ); /* reading delay */
fprintf( stderr, "<-- %s done reading\n", (char *)arg );
pthread_rwlock_unlock( &rwlock );
return NULL;
} /* reader */
void *writer( void *arg ) {
unsigned long int i;
pthread_rwlock_wrlock( &rwlock );
fprintf( stderr, "==> %s starting to write\n", (char *)arg );
for( i = 0; i < 50000000; ++i ); /* writing delay */
fprintf( stderr, "<== %s done writing\n", (char *)arg );
pthread_rwlock_unlock( &rwlock );
return NULL;
} /* writer */
int main( void ) {
pthread_t r1, r2, w1, r3, w2, r4, wa, ra, wb, rb, wc, rc, wd, rd;
unsigned long int i;
#ifdef SOL_SETCONC /* set concurrency on Solaris machines */
pthread_setconcurrency( SOL_SETCONC );
#endif
pthread_rwlock_init(&rwlock, NULL);
pthread_create(&r1, NULL, reader, "reader_1");
for(i = 0 ; i < 500; ++i); /* delay */
pthread_create(&r2, NULL, reader, "reader_2");
for(i = 0; i < 500; ++i); /* delay */
pthread_create(&w1, NULL, writer, "writer_1");
for(i = 0; i < 500; ++i); /* delay */
pthread_create(&r3, NULL, reader, "reader_3");
for(i = 0; i < 500; ++i); /* delay */
pthread_create(&w2, NULL, writer, "writer_2");
for(i = 0; i < 500; ++i); /* delay */
pthread_create(&r4, NULL, reader, "reader_4");
pthread_create(&ra, NULL, reader, "reader_a");
pthread_create(&wa, NULL, writer, "writer_a");
pthread_create(&rb, NULL, reader, "reader_b");
pthread_create(&wb, NULL, writer, "writer_b");
pthread_create(&rc, NULL, reader, "reader_c");
pthread_create(&wc, NULL, writer, "writer_c");
pthread_create(&rd, NULL, reader, "reader_d");
pthread_create(&wd, NULL, writer, "writer_d");
/* join all threads before exiting */
pthread_join(r1, NULL);
pthread_join(r2, NULL);
pthread_join(w1, NULL);
pthread_join(r3, NULL);
pthread_join(w2, NULL);
pthread_join(r4, NULL);
pthread_join(wa, NULL);
pthread_join(ra, NULL);
pthread_join(wb, NULL);
pthread_join(rb, NULL);
pthread_join(wc, NULL);
pthread_join(rc, NULL);
pthread_join(wd, NULL);
pthread_join(rd, NULL);
/* done */
return 0;
}
--
-----------------------------------------------------------------------
Gabriel L. Somlo Assistant System Administrator
Computer Science Department
Colorado State University e-mail: somlo@cs.colostate.edu
601 Howes St. 2nd Floor phone: +1 (970) 491-5305
Fort Collins, CO 80523
-----------------------------------------------------------------------
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/