pthread версии win32? (Мангуста) - PullRequest
3 голосов
/ 21 декабря 2010

Скажите, пожалуйста, в чем разница между версиями pthread: VC2, VCE2 и VSE2?Как выбрать, какой из них я должен использовать с библиотекой веб-сервера Mongoose для Visual C ++ Express 2010?

Спасибо !!!

1 Ответ

4 голосов
/ 21 декабря 2010
  • VCE - DLL-библиотека MSVC с обработкой исключений C ++
  • VSE - DLL-библиотека MSVC со структурной обработкой исключений
  • VC - DLL-библиотека MSVC с кодом очистки C

Какой из них вы хотите использовать с 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: Добавлен номер совместимости, чтобы приложения могли различать двоичные несовместимые версии библиотек и библиотек.

В целом: 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» в исходном коде Win32 pthreads (есть только несколько мест, где разные модели очистки вступают в игру).

...