Macos cgeventtap的apple mach-o链接器id错误

Macos cgeventtap的apple mach-o链接器id错误,macos,cocoa,Macos,Cocoa,我想让CGEventTap工作。我认为我做的每件事都是正确的,但当我开始运行时,会出现以下错误: Apple Mach-O Linker (id) Error Undefined symbols for architecture x86_64: "_tapCallback", referenced from: -[TestAppDelegate applicationDidFinishLaunching:] in TestAppDelegate.o ld: symbol(s)

我想让CGEventTap工作。我认为我做的每件事都是正确的,但当我开始运行时,会出现以下错误:

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

听起来您已经定义了
tapCallback()
函数,但实际上还没有实现它。换句话说,您的
TestAppDelegate
类可能如下所示:

#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()
函数。如果您实际上已经实现了它,比如说,在另一个文件中,请确保该文件包含在构建的目标中

否则,执行类似操作应允许程序运行:

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

也可能是
tapCallback()
是在未编译和链接到目标的源文件中定义的。如果是这种情况,则必须将源文件添加到编译源代码生成阶段。@bavariable:这就是我所说的
如果您实际实现了它,比如在另一个文件中,请确保该文件包含在生成的目标中。
Ooops,应该仔细阅读您的答案。我的眼睛只看到代码P@NSGod:我通过包含应用程序服务来实现它:
#include
。这是正确的吗?