请告诉我pthread版本有什么区别:VC2,VCE2和VSE2?如何选择我必须使用Visual C ++ Express 2010 for Mongoose webserver库中的哪一个?
谢谢!!!
答案 0 :(得分:4)
您希望在VC ++ Express 2010中使用哪一个取决于您希望如何处理pthread清理。如果你将它链接到Mongoose网络服务器(我不熟悉),我想你会想要使用异常处理模型,因为代码是用它编译的。
pthreads Win32库有一些细节:
图书馆命名
因为正在构建库 使用各种异常处理 计划和编制者 - 以及因为 如果,库可能无法可靠地工作 这些是混合在一个应用程序, 每个不同版本的库 有它自己的名字。
注1:真的不兼容 在EH的实现之间 不同的编译器。它应该是 可以使用标准C版本 来自C ++的任何编译器 使用不同的应用程序构建 编译器。如果您使用的是EH版本 图书馆,那么你必须使用 应用程序的相同编译器。 这是另一个复杂因素 可以避免的依赖性 仅使用标准C库 版本
注2:如果使用标准C 带有C ++应用程序的pthread * .dll, 那么你定义的任何函数 打算通过 pthread_cleanup_push()必须是 __cdecl。
注3:意图也是名字 VC或GC版本(应该是 是任意的)作为pthread.dll, 包括pthread.lib和libpthread.a 作为适当的。这不再是 可能会发生。
注4:兼容性编号为 添加,以便应用程序可以 区分二进制 不兼容的libs版本 的DLL。
一般来说:pthread [VG] {SE,CE,C} c.dll 并行线程[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
”(只有少数地方可以使用不同的清理模型)。