2011-11-10 2 views
1

CGEventTap 작업을하려고합니다. 내가 제대로 모든 것을 다했다고 생각하지만, 내가 도망 갈 때이 오류 얻을 :cgeventtap에 대한 apple mach-o 링커 ID 오류

Apple Mach-O Linker (id) Error 

Undefined symbols for architecture x86_64: 
    "_tapCallback", referenced from: 
     -[TestAppDelegate applicationDidFinishLaunching:] in TestAppDelegate.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

답변

2

그것은 당신이 당신의 tapCallback() 기능을 정의하지만, 실제로 그것을 구현하지 않은 같은 소리를.

#import "TestAppDelegate.h" 

CGEventRef tapCallback(CGEventTapProxy proxy, 
      CGEventType type, 
      CGEventRef event, 
       void *userInfo); 


@implementation TestAppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    CFMachPortRef eventTapRef = CGEventTapCreate(kCGSessionEventTap, 
               kCGTailAppendEventTap, 
               kCGEventTapOptionListenOnly, 
               kCGEventMaskForAllEvents, 
               tapCallback, 
               NULL); 
    // additional code 

} 

@end 

어딘가에 라인을 따라, 당신이 실제로 tapCallback() 기능을 구현해야합니다 : 즉, 귀하의 TestAppDelegate 클래스는 아마 다음과 같이 보입니다. 다른 파일에서 실제로 구현 한 경우 파일이 빌드 된 대상에 포함되어 있는지 확인하십시오.

그렇지 않으면이 같은 일을하면 프로그램이 실행될 수 있도록해야합니다 :

CGEventRef tapCallback(CGEventTapProxy proxy, 
          CGEventType type, 
           CGEventRef event, 
            void *userInfo) { 
    NSLog(@"tapCallback()"); 
    return event; 
} 
+0

는 또한 케이스가 될 수있는'tapCallback()'컴파일 및 링크되지 않는 소스 파일에 정의되어 있습니다 목표. 이 경우 소스 파일을 컴파일 소스 빌드 단계에 추가해야합니다. –

+0

@Bavarious : 그건 내가'당신이 실제로 그것을 구현했다면, 다른 파일에서, 당신의 빌드 된 타겟에 파일이 포함되어 있는지를 확인한 것입니다. ' – NSGod

+0

Ooops, 당신의 대답을 더주의 깊게 읽었어야합니다. 내 눈은 코드 만 보았습니다. : P –