Приветствую всех! Натыкаюсь в программе (обычная однопоточная консолька, делающая несколько запросиков) на SIGINT. Программа использует libCURL (+ OpenSSL + zlib). Натыкаюсь, только если использую соединение к защищенным ресурсам (HTTPS). Обращаясь только к HTTP процесс завершается нормально без ошибок. Прогнал через профилирование в Dependency Walker и увидел две ошибки: Цитата 127 ошибка говорит нам, что такой функции нету в дллке. MSDN и исходники OpenSSL подсказывают, что эта функция используется на WinCe, при этом макросы для WinCe при сборке OpenSSL я не использовал. Вторая ошибка похожая, только с функцией _OPENSSL_isservice. Ее я решил пересобрав OpenSSL с макросом _WIN32_WINNT=_WIN32_WINNT_WIN7. Как решить первую не знаю. Насколько понимаю, эта ошибка и является причиной SIGINT. А также: - Без отладки и запуска вне IDE это выглядит как стандартное окошко ошибки винды после отработки программы. - Все либы собирал самостоятельно из исходников. - Юзал в программе ключи линкера -libgcc, -libstdc++ - ничего не изменилось. - В таблице экспорта kernel32.dll отсутствует функция CloseToolhelp32Snapshot. Кусок кода из OpenSSL, где юзается этот самый GetProcAddress(...CloseToolhelp32Snapshot) Код (Text): #include <tlhelp32.h> #ifdef _WIN32_WCE # define DLLNAME "TOOLHELP.DLL" #else # ifdef MODULEENTRY32 # undef MODULEENTRY32 /* unmask the ASCII version! */ # endif # define DLLNAME "KERNEL32.DLL" #endif typedef HANDLE (WINAPI *CREATETOOLHELP32SNAPSHOT)(DWORD, DWORD); typedef BOOL (WINAPI *CLOSETOOLHELP32SNAPSHOT)(HANDLE); typedef BOOL (WINAPI *MODULE32)(HANDLE, MODULEENTRY32 *); static int win32_pathbyaddr(void *addr,char *path,int sz) { HMODULE dll; HANDLE hModuleSnap = INVALID_HANDLE_VALUE; MODULEENTRY32 me32; CREATETOOLHELP32SNAPSHOT create_snap; CLOSETOOLHELP32SNAPSHOT close_snap; MODULE32 module_first, module_next; int len; if (addr == NULL) { union { int(*f)(void*,char*,int); void *p; } t = { win32_pathbyaddr }; addr = t.p; } dll = LoadLibrary(TEXT(DLLNAME)); if (dll == NULL) { DSOerr(DSO_F_WIN32_PATHBYADDR,DSO_R_UNSUPPORTED); return -1; } create_snap = (CREATETOOLHELP32SNAPSHOT) GetProcAddress(dll,"CreateToolhelp32Snapshot"); if (create_snap == NULL) { FreeLibrary(dll); DSOerr(DSO_F_WIN32_PATHBYADDR,DSO_R_UNSUPPORTED); return -1; } /* We take the rest for granted... */ #ifdef _WIN32_WCE close_snap = (CLOSETOOLHELP32SNAPSHOT) GetProcAddress(dll,"CloseToolhelp32Snapshot"); #else close_snap = (CLOSETOOLHELP32SNAPSHOT)CloseHandle; #endif module_first = (MODULE32)GetProcAddress(dll,"Module32First"); module_next = (MODULE32)GetProcAddress(dll,"Module32Next"); hModuleSnap = (*create_snap)(TH32CS_SNAPMODULE,0); if( hModuleSnap == INVALID_HANDLE_VALUE ) { FreeLibrary(dll); DSOerr(DSO_F_WIN32_PATHBYADDR,DSO_R_UNSUPPORTED); return -1; } me32.dwSize = sizeof(me32); if(!(*module_first)(hModuleSnap,&me32)) { (*close_snap)(hModuleSnap); FreeLibrary(dll); DSOerr(DSO_F_WIN32_PATHBYADDR,DSO_R_FAILURE); return -1; } do { if ((BYTE *)addr >= me32.modBaseAddr && (BYTE *)addr < me32.modBaseAddr+me32.modBaseSize) { (*close_snap)(hModuleSnap); FreeLibrary(dll); #ifdef _WIN32_WCE # if _WIN32_WCE >= 101 return WideCharToMultiByte(CP_ACP,0,me32.szExePath,-1, path,sz,NULL,NULL); # else len = (int)wcslen(me32.szExePath); if (sz <= 0) return len+1; if (len >= sz) len=sz-1; for(i=0;i<len;i++) path[i] = (char)me32.szExePath[i]; path[len++] = 0; return len; # endif #else len = (int)strlen(me32.szExePath); if (sz <= 0) return len+1; if (len >= sz) len=sz-1; memcpy(path,me32.szExePath,len); path[len++] = 0; return len; #endif } } while((*module_next)(hModuleSnap, &me32)); (*close_snap)(hModuleSnap); FreeLibrary(dll); return 0; } Вот Makefile, по которому собирал OpenSSL. Просьба, подскажите, куда копать или как решить данный вопрос. Допинфо: Компилятор: gcc 4.6.2 (MinGW) IDE: Eclipse CDT 3.7.2 ОС: Win 7 Pro x86 Либы: libCURL 7.24.0, OpenSSL 1.0.0g, zlib 1.2.6