请告诉我 pthread 版本之间有什么区别:VC2、VCE2 和 VSE2?如何选择我必须在 Visual C++ Express 2010 for Mongoose 网络服务器库中使用哪些?
谢谢!!!
请告诉我 pthread 版本之间有什么区别:VC2、VCE2 和 VSE2?如何选择我必须在 Visual C++ Express 2010 for Mongoose 网络服务器库中使用哪些?
谢谢!!!
您想在 VC++ Express 2010 中使用哪一个取决于您希望如何处理 pthread 清理。如果您将此链接到 Mongoose 网络服务器(我不熟悉),我认为您会希望在编译代码时使用异常处理模型。
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 - 无异常 - 使用 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 libpthreadGCEc.a
如果您想了解每种清理模型的不同之处,请__CLEANUP
在 pthreads Win32 源代码中搜索“”(不同清理模型发挥作用的地方很少)。