Вопрос

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

Спасибо!!!

Это было полезно?

Решение

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

Какой из них вы хотели бы использовать с VC ++ Express 2010, зависит от того, как вы хотите, чтобы Pthread очищал, чтобы обрабатывать. Если вы связываете это с Mongoose Webserver (с которым я не знаком), я думаю, что вы захотите использовать модель обработки исключений, как этот код составлен.

Библиотека 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 - структурированный 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 (есть только несколько мест, где в игру вступают различные модели очистки).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top