请告诉我Pthread版本之间有什么区别:VC2,VCE2和VSE2?如何选择哪个我必须在Visual C ++ Express 2010中用于Mongoose Web服务器库?

谢谢!!!

有帮助吗?

解决方案

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

您要在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:添加了兼容性编号,以便应用程序可以区分LIB和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- c -c -c -c -no Exceptions-使用setJMP/longjmp

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

该名称也可以用“ D”后缀,以指示图书馆的调试版本。例如pthreadvc2d.lib。调试版本包含用于调试(符号等)的其他信息,并且通常不会以任何方式进行优化(通过优化关闭而编译)。

例如:pthreadvse.dll(msvc/seh)pthreadgce.dll(gnuc/c ++ eh)pthreadgc.dll(gnuc/nont依赖异常) pthreadvc2.dll(msvc/不依赖异常 - 与pthreadvc1.dll或pthreadvc.dll不兼容)

GNU库存档文件名已相应地更改为:

libpthreadgcec.a libpthreadgcc.a

如果您想查看这些清理模型的差异,请搜索“__CLEANUP“在Pthreads Win32来源(只有几个地方,不同的清理模型开始起作用)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top