http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51906
--- Comment #38 from Jack Howarth <howarth at nitro dot med.uc.edu> 2012-02-03 02:39:01 UTC --- (In reply to comment #37) Actually that above approach won't work because the pthread.h header on darwin11 always sources... #if (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || defined(_DARWIN_C_SOURCE) #define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER {_PTHREAD_ERRORCHECK_MUTEX_SIG_init, {0}} #define PTHREAD_RECURSIVE_MUTEX_INITIALIZER {_PTHREAD_RECURSIVE_MUTEX_SIG_init, {0}} #endif /* (!_POSIX_C_SOURCE && !_XOPEN_SOURCE) || _DARWIN_C_SOURCE */ regardless of MACOSX_DEPLOYMENT_TARGET. This actually seems like another Apple bug to me since there really should be a wrapper like... #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED // code only compiled when targeting Mac OS X and not iPhone // note use of 1070 instead of __MAC_10_7 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 // code in here to run targeting Lion #else // code here can assume targeting pre-Lion. #endif #endif I think we really have to unconditionally initialize the mutex on darwin.