[closed]RtlLookupAtomInAtomTable вместо EnterCriticalSection вызывает
CamelCase вырвиглазен
ты это в адрес ptw32_threadReusePop?
за наводку спасибо, эту либу я посмотрю. однако косяк не изза pthread а из-за странной линковки.
Так что вопрос с линковкой не должен возникнуть.
оказывается если pthreads линкуешь статически то нужно делать #include <implement.h> и далее вызов ptw32_processInitialize до первого использования либы. Иначе она обращается к неинициализированным CRITICAL_SECTION из-за чего и возникает такое странное поведение.
Не лучше ли будет вот это?попробовал, все бы ничего, но
Windows Server 2003 and Windows XP/2000: Condition variables are not supported.
а либа их использует
Оставить комментарий
elenangel
решение: если pthreads линкуешь статически то нужно делать #include <implement.h> и далее вызов ptw32_processInitialize до первого использования либысобираю программу с pthreads-win32, pthreads собираю тоже из исходников как часть проекта и линкую статически.
при запуске собранного экзешника под виндами программа молча выходит. запуск под gdb показывает что упало в вызове функции
бектрейс:
ничего подобного RtlLookupAtomInAtomTable, RtlIpv6AddressToStringExA я не вызывал, в исходниках pthread этих функций тоже нету. иду в функцию ptw32_threadReusePop и вижу в ней 2 вызова WINAPI - EnterCriticalSection в начале функции и LeaveCriticalSection - в конце. Добавляю пару printf и убеждаюсь что падает на EnterCriticalSection, то есть почему-то вместо нее вызывается RtlLookupAtomInAtomTable. Сломанный mingw32, вернее его либы? Как с этим бороться?
исходник функции с моими дебажными строчками:
версия компилера