pthread версии win32? (Мангуста)
Подскажите пожалуйста, в чем разница между версиями pthread: VC2, VCE2 и VSE2? Как выбрать, какой из них я должен использовать с библиотекой веб-сервера Mongoose для C++ Express 2010?
Спасибо!!!
1 ответ
- VCE - MSVC dll с обработкой исключений C++
- VSE - MSVC dll со структурной обработкой исключений
- VC - MSVC dll с кодом очистки C
То, что вы захотите использовать с VC++ Express 2010, зависит от того, как вы хотите, чтобы pthread очищался. Если вы связываете это с веб-сервером Mongoose (с которым я не знаком), я думаю, вы захотите использовать модель обработки исключений, поскольку этот код компилируется.
Библиотека Win32 pthreads подробно рассказывает:
Именование библиотеки
Поскольку библиотека строится с использованием различных схем обработки исключений и компиляторов - и поскольку библиотека может работать ненадежно, если они смешаны в приложении, каждая отдельная версия библиотеки имеет свое собственное имя.
Примечание 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: добавлен номер совместимости, чтобы приложения могли различать двоичные несовместимые версии libs и 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 libpthreadGCc.a
Если вы хотите увидеть, в чем различия для каждой из этих моделей очистки, поищите "__CLEANUP
msgstr "в исходном коде Win32 pthreads (есть только несколько мест, где разные модели очистки вступают в игру).