2016-10-31 76 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,但不是在终端与自制gcc 6.2。

回答

0

您与“核心基金”,但你在谈论(具体的Foundation Release Notes for macOS 10.12 & iOS 10的第一几段描述更多的描述API可用性宏有点更详细的可用性宏标记此。

我怀疑你可能需要简单地包括在构建基础架构(拿起这些宏其中的CoreFoundation & CoreGraphics中似乎依赖),你应该没问题前进。

+0

好吧,我会试试! –

+0

我试图在我的c文件中包含,它带来了很多错误。我也尝试使用-framework Foundation进行编译,但似乎没有帮助。难道我做错了什么? –

+0

@ Robert.S是的。你现在做错的主要事情是试图用ObjC-only包含来编译C语言。 – hidefromkgb

1

如前所述here,碳早已被弃用。但是,你可以尝试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'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标头。