Question

Please tell me what difference between pthread versions: VC2, VCE2 and VSE2? How to choose which of them I must use with Visual C++ Express 2010 for Mongoose webserver library?

Thank you!!!

Was it helpful?

Solution

  • VCE - MSVC dll with C++ exception handling
  • VSE - MSVC dll with structured exception handling
  • VC - MSVC dll with C cleanup code

Which one you'd want to use with VC++ Express 2010 depends on how you want pthread clean up to be handled. If you're linking this to the Mongoose webserver (which I'm not familiar with), I think you'll want to use the exception handling model as that code is compiled with.

The pthreads Win32 library goes into a fair bit of detail:

Library naming

Because the library is being built using various exception handling schemes and compilers - and because the library may not work reliably if these are mixed in an application, each different version of the library has it's own name.

Note 1: the incompatibility is really between EH implementations of the different compilers. It should be possible to use the standard C version from either compiler with C++ applications built with a different compiler. If you use an EH version of the library, then you must use the same compiler for the application. This is another complication and dependency that can be avoided by using only the standard C library version.

Note 2: if you use a standard C pthread*.dll with a C++ application, then any functions that you define that are intended to be called via pthread_cleanup_push() must be __cdecl.

Note 3: the intention was to also name either the VC or GC version (it should be arbitrary) as pthread.dll, including pthread.lib and libpthread.a as appropriate. This is no longer likely to happen.

Note 4: the compatibility number was added so that applications can differentiate between binary incompatible versions of the libs and dlls.

In general: pthread[VG]{SE,CE,C}c.dll pthread[VG]{SE,CE,C}c.lib

where: [VG] indicates the compiler V - MS VC, or G - GNU C

{SE,CE,C} indicates the exception handling scheme SE - Structured EH, or CE - C++ EH, or C - no exceptions - uses setjmp/longjmp

c - DLL compatibility number indicating ABI and API compatibility with applications built against any snapshot with the same compatibility number. See 'Version numbering' below.

The name may also be suffixed by a 'd' to indicate a debugging version of the library. E.g. pthreadVC2d.lib. Debugging versions contain additional information for debugging (symbols etc) and are often not optimised in any way (compiled with optimisation turned off).

For example: pthreadVSE.dll (MSVC/SEH) pthreadGCE.dll (GNUC/C++ EH) pthreadGC.dll (GNUC/not dependent on exceptions) pthreadVC1.dll (MSVC/not dependent on exceptions - not binary compatible with pthreadVC.dll) pthreadVC2.dll (MSVC/not dependent on exceptions - not binary compatible with pthreadVC1.dll or pthreadVC.dll)

The GNU library archive file names have correspondingly changed to:

libpthreadGCEc.a libpthreadGCc.a

If you want to see what the differences are for each of these clean up models, search for "__CLEANUP" in the pthreads Win32 source (there are only a few places where the different clean up models come into play).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top