Когда я пытаюсь скомпилировать что-либо, включающее CoreFoundation, CoreServices или CoreGraphics, например, Carbon, я получаю следующее сообщение об ошибке.
gcc x.c -framework Carbon
In file included from /usr/include/Availability.h:180:0,
from /usr/local/Cellar/gcc/6.2.0/lib/gcc/6/gcc/x86_64-apple-darwin16.1.0/6.2.0/include-fixed/math.h:46,
from /System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:24,
from /System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:19,
from /System/Library/Frameworks/Carbon.framework/Headers/Carbon.h:20,
from x.c:1:
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h:53:34: error: 'introduced' undeclared here (not in a function)
kCFISO8601DateFormatWithYear API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) = (1UL << 0),
^
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h:777:39: error: 'deprecated' undeclared here (not in a function)
const CFStringRef kCFURLLabelColorKey API_DEPRECATED("Use NSURLLabelColorKey", macosx(10.6, 10.12), ios(4.0, 10.0), watchos(2.0, 3.0), tvos(9.0, 10.0));
^
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h:777:39: error: 'message' undeclared here (not in a function)
const CFStringRef kCFURLLabelColorKey API_DEPRECATED("Use NSURLLabelColorKey", macosx(10.6, 10.12), ios(4.0, 10.0), watchos(2.0, 3.0), tvos(9.0, 10.0));
^
In file included from /System/Library/Frameworks/Security.framework/Headers/Security.h:81:0,
from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h:43,
from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h:27,
from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/IconsCore.h:23,
from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h:22,
from /System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:39,
from /System/Library/Frameworks/Carbon.framework/Headers/Carbon.h:20,
from x.c:1:
/System/Library/Frameworks/Security.framework/Headers/Authorization.h:194:7: error: variably modified 'bytes' at file scope
char bytes[kAuthorizationExternalFormLength];
^~~~~
In file included from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGContext.h:18:0,
from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h:9,
from /System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h:11,
from /System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:35,
from /System/Library/Frameworks/Carbon.framework/Headers/Carbon.h:24,
from x.c:1:
/System/Library/Frameworks/CoreGraphics.framework/Headers/CGFont.h:53:40: error: initializer element is not constant
static const CGFontIndex kCGGlyphMax = kCGFontIndexMax;
У кого-нибудь есть идея, в чем может быть проблема? Я не уверен, началось ли это после обновления до macOS Sierra или Xcode до версии 8.1. Редактировать: Программа, кажется, компилируется в Xcode, но не в терминале с homebrew gcc 6.2.
Как указано Вот, Углерод уже давно устарел. Тем не менее, вы можете попробовать AppKit:
gcc x.c -framework AppKit
Для меня это прекрасно работает, когда я пишу приложения на чистом C для OS X.
[РЕДАКТИРОВАТЬ:] Теперь код.#include <ApplicationServices/ApplicationServices.h>
#include <unistd.h>
int main() {
while (!CGEventSourceKeyState(kCGEventSourceStateHIDSystemState, 0x7E))
usleep(10000);
return 0;
}
Это приложение зависит только от AppKit и зацикливается до стрелки вверх (код сканирования) 0x7E
) нажата.
Вот полный список кодов (не уверен, где они находятся в официальных заголовках): Виртуальные ключевые коды Carbon.
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h:53:34: error: 'introduced' undeclared here (not in a function)
kCFISO8601DateFormatWithYear API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) = (1UL << 0),
ИМХО, просто этот заголовок не поддерживается gcc-6.2, а только clang. Возможно, это будет «исправлено» с помощью gcc-7.
Аналогичная проблема существует с gcc-5.x и El Capitan (SDK 10.11), где gcc-6.x необходим для сборки с заголовками Apple, такими как этот.
Вы пометили это как «Core-Foundation», но говорите о макросах доступности, о которых вы говорите (более подробно описано в первых парах параграфов Замечания по выпуску Foundation для macOS 10.12 & iOS 10 немного подробнее опишите макросы доступности API.
Я подозреваю, что вам может понадобиться просто включить среду Foundation в вашу сборку (чтобы подобрать эти макросы, которые CoreFoundation & CoreGraphics, кажется, зависит от), и вы должны быть в порядке в будущем.