Utrzymuję mieszany program wiersza poleceń C i C++, który musi działać na systemach Linux, Windows i OS X. Niedawno zaktualizowałem system do wersji Yosemite i systemu OS X kompilacja już nie działa. Błąd:Jak radzić sobie z niezgodnym z gcc kodem w nagłówkach OS X Yosemite Core
/usr/include/dispatch/object.h:143:15: error: expected identifier or '(' before '^' token
Other folks have run into this bug.
Linia kodu, który zawodzi, to typedef, który używa '^', który jest non-standard extension providing support for closures.
Podstawowym problemem wydaje się, że niektóre standardowe nagłówki Apple zaczynają wymagać specyficznych rozszerzeń Clang. Niestety nasz program ma bardzo głęboki zestaw zależności, z których niektóre nie będą się kompilować w Clang. Używamy kompilatorów GCC zainstalowanych za pośrednictwem MacPorts. Na razie mam obejście: zmiana linii nagłówka object.h
na kompatybilną z GCC. Jednak hakowanie plików włączeniowych pod numerem /usr/include
brzmi dla mnie jak żądanie kłopotów.
Czy każdy guru OS X/Clang może zaproponować bardziej zrównoważone sposoby radzenia sobie z tym problemem? Czy to ogranicza przyszłą użyteczność GCC na OS X?
Clang to jedyny kompilator wspierany przez Apple dla OS X. GCC jest przestarzałe i nieobsługiwane. Nie spodziewałbym się, że nadal będzie funkcjonował. –
Obawiam się, że @VariableLengthCoder jest prawdopodobnie w większości poprawny. –
To daje mi sadz. No cóż, na razie jesteśmy w stanie zbudować pod Snow Leopard. –