pthread Win32版本? (猫鼬)
-
12-10-2019 - |
题
请告诉我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来源(只有几个地方,不同的清理模型开始起作用)。