Mosh スレッド Windows 対応
ビルドは通ったが GC のエラーが出る。
Boehm GC のドキュメントを読もう。Fatal error in gc. Collecting from unknown thread.
追記2
#define GC_WIN32_THREADS 1 としてビルドすると何やらよく分からないエラーになった。
ML で似た症状を探してみよう。
:\Program Files\Microsoft Visual Studio 9.0\VC\include\process.h(54) : error C2059: 構文エラー : '{' C:\Program Files\Microsoft Visual Studio 9.0\VC\include\process.h(54) : error C2143: 構文エラー : ';' が '{' の前にありません。 C:\Program Files\Microsoft Visual Studio 9.0\VC\include\process.h(54) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?) C:\Program Files\Microsoft Visual Studio 9.0\VC\include\process.h(54) : error C2059: 構文エラー : '[' C:\Program Files\Microsoft Visual Studio 9.0\VC\include\process.h(59) : warning C4985: 'GC_beginthreadex': 前の宣言に属性が存在しません。 c:\mosh\gc-7.1\include\gc.h(1048) : 'GC_beginthreadex' の宣言を確認してください。 C:\Program Files\Microsoft Visual Studio 9.0\VC\include\process.h(60) : warning C4985: 'GC_endthreadex': 前の宣言に属性が存在しません。 c:\mosh\gc-7.1\include\gc.h(1053) : 'GC_endthreadex' の宣言を確認してください。
process.h
#ifdef _MT _CRTIMP uintptr_t __cdecl _beginthread (_In_ void (__cdecl * _StartAddress) (void *), _In_ unsigned _StackSize, _In_opt_ void * _ArgList); _CRTIMP void __cdecl _endthread(void); _CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void * _Security, _In_ unsigned _StackSize, _In_ unsigned (__stdcall * _StartAddress) (void *), _In_opt_ void * _ArgList, _In_ unsigned _InitFlag, _In_opt_ unsigned * _ThrdAddr); _CRTIMP void __cdecl _endthreadex(_In_ unsigned _Retval);
gc.h
#if (defined(__DMC__) || defined(_MSC_VER)) && defined(GC_DLL) # ifdef GC_BUILD # define GC_API extern __declspec(dllexport) # else # define GC_API __declspec(dllimport) # endif #endif #if defined(__WATCOMC__) && defined(GC_DLL) # ifdef GC_BUILD # define GC_API extern __declspec(dllexport) # else # define GC_API extern __declspec(dllimport) # endif #endif #ifndef GC_API #define GC_API extern #endif GC_API uintptr_t GC_beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr); GC_API void GC_endthreadex(unsigned retval);
追記3
process.h の include を止めたら直った。
しかし test\concurrent.scm が通らない。