【发布时间】:2010-12-20 22:08:16
【问题描述】:
请告诉我 pthread 版本之间有什么区别:VC2、VCE2 和 VSE2?如何选择我必须在 Visual C++ Express 2010 for Mongoose 网络服务器库中使用哪些?
谢谢!!!
【问题讨论】:
标签: windows visual-c++ pthreads mongoose-web-server pthreads-win32
请告诉我 pthread 版本之间有什么区别:VC2、VCE2 和 VSE2?如何选择我必须在 Visual C++ Express 2010 for Mongoose 网络服务器库中使用哪些?
谢谢!!!
【问题讨论】:
标签: windows visual-c++ pthreads mongoose-web-server pthreads-win32
您想在 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:兼容性编号为 添加,以便应用程序可以 区分二进制 不兼容的库版本和 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/not 依赖于异常 - 不是二进制的 与 pthreadVC.dll 兼容) pthreadVC2.dll(MSVC/不依赖于 例外 - 不兼容二进制 使用 pthreadVC1.dll 或 pthreadVC.dll)
GNU 库归档文件名 已相应更改为:
libpthreadGCEc.a libpthreadGCc.a
如果您想了解每种清理模型的不同之处,请在 pthreads Win32 源代码中搜索“__CLEANUP”(不同清理模型发挥作用的地方很少)。
【讨论】: