Pregunta

Por favor, dime lo que diferencia entre las versiones pthread: VC2, Vce2 y VSE2? ¿Cómo elegir cuál de ellos debo usar con Visual C ++ Express 2010 para la biblioteca de servidor web Mangosta?

Gracias !!!

¿Fue útil?

Solución

  • VCE - DLL MSVC con C ++ manejo de excepciones
  • VSE - DLL MSVC con el manejo de excepciones estructurado
  • VC - DLL MSVC con el código C de limpieza

¿Cuál te gustaría utilizar con VC ++ Express 2010 depende de cómo desea pthread la limpieza a manipular. Si va a asociar esto con el servidor web de la mangosta (que no estoy familiarizado), pienso que usted desea utilizar el modelo de manejo de excepciones como el código se compila con.

La biblioteca pthreads Win32 entra en un poco de detalle:

Biblioteca de nombres

Debido a que la biblioteca se está construyendo utilizando diversos manejo de excepciones esquemas y compiladores - y porque la biblioteca puede no funcionar correctamente si estos son mezclados en una aplicación, cada versión diferente de la biblioteca tiene su propio nombre.

Nota 1: la incompatibilidad es realmente entre las implementaciones Eh del compiladores diferentes. Debería ser posible utilizar la versión estándar C de cualquiera de compilador con C ++ aplicaciones construidas con una diferente compilador. Si utiliza una versión de EH la biblioteca, entonces usted debe utilizar el mismo compilador para la aplicación. Esta es otra complicación y dependencia que puede ser evitado por usando sólo la biblioteca C estándar versión.

Nota 2: si utiliza un estándar de C pthread * .dll con una aplicación de C ++, entonces cualquier funciones que se definen que están destinados a ser llamado a través pthread_cleanup_push () debe ser __cdecl.

Nota 3: la intención era también el nombre ya sea la versión VC o GC (lo que debería ser arbitraria) como pthread.dll, incluyendo pthread.lib y libpthread.a según sea apropiado. Esto ya no es probable que suceda.

Nota 4: el número de compatibilidad era agregado para permitir su aplicación Diferenciar entre binario versiones incompatibles de los libs y dlls.

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

donde: [VG] indica el compilador V - MS VC, o G - GNU C

{SE, CE, C} indica la excepción manejo esquema SE - Estructurado EH, o CE - C ++ EH, o C - sin excepciones - usos setjmp / longjmp

c - DLL compatibilidad número indicando ABI y API compatibilidad con las aplicaciones construidas en contra cualquier instantánea con el mismo número de compatibilidad. Ver 'Versión de numeración' a continuación.

El nombre puede también ser el sufijo 'd' para indicar una versión de depuración de la biblioteca. P.ej. pthreadVC2d.lib. versiones de depuración contienen adicional información para la depuración (símbolos etc) y, a menudo no están optimizados en de ninguna manera (compilado con optimización desactivado).

Por ejemplo: pthreadVSE.dll (MSVC / SEH) pthreadGCE.dll (GNUC / C ++ EH) pthreadGC.dll (GNUC / no en dependiente excepciones) pthreadVC1.dll (MSVC / no depende de excepciones - no binario compatible con pthreadVC.dll) pthreadVC2.dll (MSVC / no en dependiente excepciones - no compatible a nivel binario con pthreadVC1.dll o pthreadVC.dll)

La biblioteca GNU nombres de archivo histórico han cambiado correspondientemente a:

libpthreadGCEc.a libpthreadGCc.a

Si desea ver cuáles son las diferencias para cada uno de estos modelos de la limpieza, busque "__CLEANUP" en el pthreads fuente Win32 (sólo hay unos pocos lugares donde los diferentes modelos de la limpieza entran en juego).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top