Macos cgeventtap的apple mach-o链接器id错误
我想让CGEventTap工作。我认为我做的每件事都是正确的,但当我开始运行时,会出现以下错误: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)
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
。这是正确的吗?