2011-11-10 6 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

あなたの答えをもっと慎重に読んでください。私の目はコードだけを見た。 :P –

関連する問題