2016-10-31 13 views
2

Когда я пытаюсь скомпилировать все, что включает в себя CoreFoundation, CoreServices или CoreGraphics, например Carbon, я получаю следующее сообщение об ошибке.Mac OSX Sierra CoreFoundation/CoreServices/CoreGraphics не работает

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.

ответ

0

Вы помечено это с «Core-Foundation» но наличие макросов вы говорите о (более подробно описано в первой пары абзацев Foundation Release Notes for macOS 10.12 & iOS 10 описывают API Наличие мест MACROS немного подробнее.

Я подозреваю, что вам может понадобиться, чтобы просто включить рамки Foundation в вашей сборке (подобрать эти макросы, которые появляются CoreFoundation & CoreGraphics зависеть), и вы должны быть хорошо идти вперед.

+0

Хорошо, я попробую! –

+0

Я попытался # включить в мой c-файл, и он вызывает много ошибок. Я также пытался скомпилировать с -framework Foundation, но, похоже, это не помогает. Я делаю что-то неправильно? –

+0

@ Robert.S да. Главное, что вы сейчас делаете неправильно, пытается скомпилировать C только с включенными ObjC. – hidefromkgb

1

Как указано here, Carbon уже давно устарела . Однако вы можете попробовать AppKit:

gcc x.c -framework AppKit 

Для меня это отлично работает, когда я пишу чисто-C приложений для OS X.

[EDIT:] Теперь код.

#include <ApplicationServices/ApplicationServices.h> 
#include <unistd.h> 

int main() { 
    while (!CGEventSourceKeyState(kCGEventSourceStateHIDSystemState, 0x7E)) 
     usleep(10000); 
    return 0; 
} 

Это приложение зависит только от AppKit и петли, пока стрелка вверх (код сканирования 0x7E) не будет нажата.

Вот полный список кодов (не знаю, где они находятся в официальных заголовках): Carbon's Virtual Key Codes.

+0

Может ли AppKit читать текущее глобальное состояние клавиатуры, например, если ключ KeyDown, не создавая какого-либо окна? Я создаю терминальные приложения, и это единственная функция, для которой я ее использую. –

+1

@ Robert.S: Добавлен код. – hidefromkgb

+0

Ты лучший, спасибо! –

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),

ИМХО это просто, что этот заголовок не поддерживается GCC-6.2, но только звоном. Возможно, он будет «исправлен» с gcc-7.

Аналогичная проблема существует с gcc-5.x и El Capitan (sdk 10.11), где gcc-6.x необходим для сборки с такими заголовками Apple, как этот.