Скажите, пожалуйста, какая разница между версиями pthread: VC2, VCE2 и VSE2? Как выбрать, какой из них я должен использовать с библиотекой веб-сервера Visual C++ Express 2010 для Mongoose?
Спасибо!!!
Скажите, пожалуйста, какая разница между версиями pthread: VC2, VCE2 и VSE2? Как выбрать, какой из них я должен использовать с библиотекой веб-сервера Visual C++ Express 2010 для 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: номер совместимости был добавлен, чтобы приложения могли различать бинарные несовместимые версии 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 — Structured 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
» в исходном коде pthreads Win32 (есть лишь несколько мест, где в игру вступают разные модели очистки).