pthread的win32版本? (mongoose)

请告诉我pthread版本之间有什么区别:VC2,VCE2和VSE2? 如何select我们必须使用Visual C ++ Express 2010 for Mongoose Web服务器库中的哪一个?

谢谢!!!

  • VCE – 使用C ++异常处理的MSVC DLL
  • VSE – 具有结构化异常处理的MSVC DLL
  • VC – 与C清理代码的MSVC DLL

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

pthreads Win32库进入了一个相当详细的位置:

图书馆命名

由于库是使用各种异常处理方案和编译器构建的,而且如果库在应用程序中混合使用时可能无法可靠地工作,则库的每个不同版本都有自己的名称。

注1:不兼容性实际上是在不同编译器的EH实现之间。 应该可以从使用不同编译器构建的C ++应用程序的编译器中使用标准C版本。 如果您使用库的EH版本,那么您必须使用相同的编译器为应用程序。 这是另一个可以通过仅使用标准C库版本来避免的复杂性和依赖性。

注2:如果您将标准C pthread * .dll与C ++应用程序一起使用,那么您定义的任何旨在通过pthread_cleanup_push()调用的函数都必须是__cdecl。

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

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

一般来说:pthread [VG] {SE,CE,C} c.dll pthread [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 ”(只有少数几个清理模型不同的地方)。