2016-10-31 2 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

당신은 "코어 재단"하지만 구체적으로 더 많은 API 가용성 매크로를 조금 설명하는 Foundation Release Notes for macOS 10.12 & iOS 10의 처음 몇 단락에서 더 자세히 설명 (에 대해 얘기하고 가용성 매크로이 태그.

난 당신이 (CoreFoundation에서 &있는 CoreGraphics가에 따라 달라 보이는 이러한 매크로를 데리러) 당신이 앞으로 괜찮을 것 같네요 단순히 빌드 재단 프레임 워크를 포함해야 할 수도 있습니다 생각한다.

+0

좋아, 해보겠습니다. –

+0

#clude 내 C 파일에 시도하고 오류가 많이 발생합니다. 또한 -framework Foundation으로 컴파일하려고했지만 도움이되지 않습니다. 내가 뭔가 잘못하고 있는거야? –

+0

@ Robert.S 예. 당신이 \ '지금 잘못하고있는 주된 일은 ObjC-only includes를 사용하여 C를 컴파일하려고하는 것입니다. – hidefromkgb

1

here 언급 한 바와 같이, 탄소는 오랫동안 사용되지 않습니다 그러나 AppKit :

을 사용해보십시오. 나는 OS X 용

순수-C 응용 프로그램을 작성할 때210

gcc x.c -framework AppKit 

은 나를 위해 그것을 잘 작동합니다 [편집 :] 이제 코드를.

#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 헤더를 사용하여 빌드하는 경우에도 마찬가지입니다.