pthread win32版本? (猫鼬)

时间:2010-12-20 22:08:16

标签: windows visual-c++ pthreads mongoose-web-server pthreads-win32

请告诉我pthread版本有什么区别:VC2,VCE2和VSE2?如何选择我必须使用Visual C ++ Express 2010 for Mongoose webserver库中的哪一个?

谢谢!!!

1 个答案:

答案 0 :(得分:4)

  • VCE - 带有C ++异常处理的MSVC DLL
  • VSE - 具有结构化异常处理的MSVC dll
  • VC - 带有C清理代码的MSVC dll

您希望在VC ++ Express 2010中使用哪一个取决于您希望如何处理pthread清理。如果你将它链接到Mongoose网络服务器(我不熟悉),我想你会想要使用异常处理模型,因为代码是用它编译的。

pthreads Win32库有一些细节:

  

图书馆命名

     

因为正在构建库   使用各种异常处理   计划和编制者 - 以及因为   如果,库可能无法可靠地工作   这些是混合在一个应用程序,   每个不同版本的库   有它自己的名字。

     

注1:真的不兼容   在EH的实现之间   不同的编译器。它应该是   可以使用标准C版本   来自C ++的任何编译器   使用不同的应用程序构建   编译器。如果您使用的是EH版本   图书馆,那么你必须使用   应用程序的相同编译器。   这是另一个复杂因素   可以避免的依赖性   仅使用标准C库   版本

     

注2:如果使用标准C   带有C ++应用程序的pthread * .dll,   那么你定义的任何函数   打算通过   pthread_cleanup_push()必须是   __cdecl。

     

注3:意图也是名字   VC或GC版本(应该是   是任意的)作为pthread.dll,   包括pthread.lib和libpthread.a   作为适当的。这不再是   可能会发生。

     

注4:兼容性编号为   添加,以便应用程序可以   区分二进制   不兼容的libs版本   的DLL。

     

一般来说:pthread [VG] {SE,CE,C} c.dll     并行线程[VG] {SE,CE,C} c.lib

     

其中:[VG]表示编译器     V - MS VC,或G - GNU C

     

{SE,CE,C}表示例外   处理方案SE - 结构化EH,   或CE - C ++ EH,或C - 没有例外    - 使用setjmp / longjmp

     

c - DLL兼容性编号   指示ABI和API           与构建的应用程序兼容           任何具有相同兼容性编号的快照。           请参阅下面的“版本编号”。

     

该名称也可以以'd'为后缀   表示调试版本   图书馆。例如。 pthreadVC2d.lib。   调试版本包含其他内容   调试信息(符号   等)并且往往没有优化   任何方式(用优化编译   关掉了。)

     

例如:     pthreadVSE.dll(MSVC / SEH)     pthreadGCE.dll(GNUC / C ++ EH)     pthreadGC.dll(GNUC /不依赖于   例外)pthreadVC1.dll(MSVC /不   依赖于例外 - 不是二元的             与pthreadVC.dll兼容)     pthreadVC2.dll(MSVC /不依赖于   例外 - 不是二进制兼容的   使用pthreadVC1.dll或pthreadVC.dll)

     

GNU库归档文件名   相应地改为:

     

libpthreadGCEc.a libpthreadGCc.a

如果您想了解每个清理模型的差异,请在pthreads Win32源代码中搜索“__CLEANUP”(只有少数地方可以使用不同的清理模型)。