версия win32? (Мангуста)

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

Спасибо!!!


person Edward83    schedule 20.12.2010    source источник


Ответы (1)


  • VCE — MSVC dll с обработкой исключений C++
  • VSE — MSVC dll со структурированной обработкой исключений
  • VC — MSVC dll с кодом очистки 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: номер совместимости был добавлен, чтобы приложения могли различать бинарные несовместимые версии 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 (есть лишь несколько мест, где в игру вступают разные модели очистки).

person Michael Burr    schedule 20.12.2010