Poly/MLのビルド
configureは終わって、makeするとエラーする。
make[2]: Entering directory `/c/Installed/polyml-github/libpolyml' /bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -O3 -mthreads -I../libffi/include -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x600 -DGIT_V ERSION=v5.6-254-gb3ed98b -Wall -DMODULEDIR=/usr/local/lib/polyml/modules -O3 - mthreads -I../libffi/include -MT arb.lo -MD -MP -MF .deps/arb.Tpo -c -o arb.lo a rb.cpp libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -O3 -mthreads -I../libffi/includ e -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x600 -DGIT_VERSION=v5.6-254-gb3ed98b -Wal l -DMODULEDIR=/usr/local/lib/polyml/modules -O3 -mthreads -I../libffi/include -M T arb.lo -MD -MP -MF .deps/arb.Tpo -c arb.cpp -o arb.o In file included from processes.h:38:0, from arb.cpp:91: locking.h:102:5: error: 'CONDITION_VARIABLE' does not name a type make[2]: *** [arb.lo] Error 1
エラー箇所。
// Simple condition variable. N.B. The Windows code does not // support multiple threads blocking on this condition variable. class PCondVar { // .... private: #if ((!defined(_WIN32) || defined(__CYGWIN__)) && defined(HAVE_PTHREAD_H)) pthread_cond_t cond; #elif defined(HAVE_WINDOWS_H) CONDITION_VARIABLE cond; #endif };
CONDITION_VARIABLEは未定義。pthread_cond_tと定義されるには、
それ以外でWindowsHがあるときはCONDITION_VARIABLEとなる。なら、Windows.hに定義されているはず。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682052%28v=vs.85%29.aspx に次のような例がある。
CRITICAL_SECTION CritSection; CONDITION_VARIABLE ConditionVar; void PerformOperationOnSharedData() { EnterCriticalSection(&CritSection); // Wait until the predicate is TRUE while( TestPredicate() == FALSE ) { SleepConditionVariableCS(&ConditionVar, &CritSection, INFINITE); } // The data can be changed safely because we own the critical // section and the predicate is TRUE ChangeSharedData(); LeaveCriticalSection(&CritSection); // If necessary, signal the condition variable by calling // WakeConditionVariable or WakeAllConditionVariable so other // threads can wake }
Widows.hがインクルードされてない?
いや、
#ifdef HAVE_WINDOWS_H #include <windows.h> #endif
あるな。??
[追記]
windows.h が古いだけだった。
[/追記]