This is the mail archive of the pthreads-win32@sources.redhat.com mailing list for the pthreas-win32 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: pthread Win32 - runtime lib VC++ setting


Thanks very much for this, and apologies for the inconvenience. As has been mentioned, I don't use the IDE. I've edited pthread.dsp directly to change the flags so I hope it's OK. It's now in CVS.

Ross

vc wrote:
Do you remember that I've asked about which flag should I use:
/MT - link statically the CRT (meaning that each module: dll, exe has it's
own copy of CRT)
or
/MD - link dinamically the CRT (meaning that the dlls, exe are using the
same CRT copy)

The idea is that all the tries that I've done with semaphore1.c (told about
them in the before email) test were done having
the pthreadVC.dll built using the /MT flag (this is what you have in the cvs
sources
by default set for release version for the .dsp project).

I've tried to build now the pthreadVC.dll using the other flag: /MD, as this
is the one recommended
by M$ when having dlls (if you are interested why, I can give you a very
short explanation), and now
the output of the test is:

semaphore1.c
... Running VC test: semaphore1.exe
thread: sem_trywait 1: Resource temporarily unavailable
thread: ok 2
main: sem_trywait 1: Resource temporarily unavailable
main: ok 2
...... Passed

I have no idea what's with "Resource temporarily unavailable" but the test
passed !!!
So, it seems that the problem is related with having just one copy of the
CRT in exe and also
in dll.

btw, in the pthread.dsp from your cvs you have the /MT flag set for release,
but in Makefile you are using the /MD flag, so I assume that the problem is
just in the .dsp file.

Viv

----- Original Message -----
From: "vc" <vcotirlea@hotmail.com>
To: "Ross Johnson" <rpj@ise.canberra.edu.au>
Sent: Tuesday, May 13, 2003 5:50 PM
Subject: Re: pthread Win32 - runtime lib VC++ setting



Hi,

Thanks for your answer.

In the semaphore1.c I've done the following:
1) check to see if NEED_SEM is defined
2) print the errno
So, now the code in semaphore1.c looks like:
 sem_t s;
 int result;

#ifdef NEED_SEM
 printf("NEED_SEM is defined\n");
#else
 printf("NEED_SEM is not defined\n");
#endif

assert(sem_init(&s, PTHREAD_PROCESS_PRIVATE, 0) == 0);

assert((result = sem_trywait(&s)) == -1);

 if ( result == -1 )
 {
   perror("thread: sem_trywait 1"); // No error
   printf("errno = %d\n", errno);
   assert(errno == EAGAIN);
 }

The output for this code is:
semaphore1.c
... Running VC test: semaphore1.exe
NEED_SEM is not defined
thread: sem_trywait 1: No error
errno = 0
Assertion failed: (errno == EAGAIN), file semaphore1.c, line 98
NMAKE : fatal error U1077: '.\semaphore1.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files\Microsoft Visual Studio .NET
2003\Vc7\bin\nmake.exe"' : return code '0x2'
Stop.


So it seems that not the NEED_SEM is the problem, as it seems to be undefined.

I also have tried this test with the binaries that I download on 4 Nov

2002


from the following link:
http://gd.tuwien.ac.at/gnu/sourceware/pthreads-win32/dll-latest/
and the output is the same:
... Running VC test: semaphore1.exe
thread: sem_trywait 1: No error
Assertion failed: (errno == EAGAIN), file semaphore1.c, line 91
NMAKE : fatal error U1077: '.\semaphore1.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files\Microsoft Visual Studio .NET
2003\Vc7\bin\nmake.exe"' : return code '0x2'
Stop.


If this helps: I'm using VC7.1 beta on Win2k.


Thanks a lot in advance,
Viv


----- Original Message ----- From: "Ross Johnson" <rpj@ise.canberra.edu.au> To: "vc" <vcotirlea@hotmail.com> Sent: Saturday, May 10, 2003 7:36 AM Subject: Re: pthread Win32 - runtime lib VC++ setting



There's only one value possible for errno that sem_trywait should return
at this point. That's EAGAIN, unless you somehow have defined NEED_SEM
when you compile the test. Unless your target system doesn't have Win32
semaphores (early WinCE etc), then NEED_SEM should not be defined.

Is this a possibility?

pthread.h includes config.h, which normally undefines NEED_SEM.

Ross

vc wrote:


Hi again,

I've downloaded the pthread sources from the cvs, build them using the

VC++


IDE
and run the tests using "nmake clean VC".

All the tests passed besides the semaphore1.exe.
The output is:
... Running VC test: semaphore1.exe
thread: sem_trywait 1: No error
Assertion failed: (errno == EAGAIN), file semaphore1.c, line 91
NMAKE : fatal error U1077: '.\semaphore1.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"D:\Program Files\Microsoft Visual Studio

.NET


2003\Vc7\bin\nmake.exe"' : return code '0x2'
Stop.

I couldn't find anything about the failure of this test in the docs, so

I


assume that it should pass.

As I'm not that used with the posix threads I don't really know what's

the


problem ...
Maybe somebody has an idea ?

Thanks a lot,
Viv

----- Original Message -----
From: "Ross Johnson" <rpj@ise.canberra.edu.au>
To: "vc" <vcotirlea@hotmail.com>
Cc: <pthreads-win32@sources.redhat.com>
Sent: Friday, May 09, 2003 2:52 AM
Subject: Re: pthread Win32 - runtime lib VC++ setting





Hi,

vc wrote:




Hi all,

I'm working on Win2k with VC++ 7.1 (VS .NET beta).
I have to port a Unix app on Windows, so I'm using the pthread lib

for


Win32 (http://sources.redhat.com/pthreads-win32/).

I've downloaded the sources, as I want to build them myself, and
looking at the VC++ settings, I discovered that in Debug
configuration, the /MDd flag is used (which means: "multithread- and
DLL-specific versions of the run-time") and in Release configuration
the /MT flag is used (even if the release version of the /MDd flag is
/MD).

Questions:
1) Why is not used in the project settings the same flag for both
configuration(i.e /MDd - debug; /MD - release or /MTd - debug; /MT -
release)? Is there a reason, or it was just by mistake?
Note: MS recommended for DLLs to use /MD (/MDd)




Re the /MT flag, I can't say now because I don't really know.





2) If for this is actually no reason, is it ok if I build the sources
using the /MD flag for release?

3) I donwloaded the sources from
ftp://sources.redhat.com/pub/pthreads-win32/sources/ and there is a
pthreads-snap-2002-11-04 directory. Is this a release version? Is it
ok if I'm using this version, or this is just a version between 2
releases?





Since you wan't to build the library yourself, you should get the

source


via anonymous CVS (see the web page for details -
http://sources.redhat.com/pthreads-win32/). It has the latest bug

fixes,


and currently bug fixes are the only changes from the latest versions
available from ftp. I will update the ftp versions ASAP.




4) When I downloaded just binaries some time ago, there were 3
versions of the binaries: VC, VSE, VCE. The sources that I downloaded
now seems to be for the VC version. Am I correct? (because this is

the


version that interests me)





See the FAQ file, answer to Q2. For VC you don't need to do anything because it is the default. The others can be used if you add the appropriate compile flags when you build your application code, and

when


you build the library if you don't use the prebuilt dlls.




Thanks a lot in advance,
Viv




Regards. Ross









Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]