我需要在 Mac OS 睡眠和唤醒时在我的 C++ 应用程序中执行一些操作。有人指出我使用 I/O Kit。
我遵循了本指南,特别是“清单 3”。
#include
的 IOKit
指令没有发生构建错误。
但是,当我取消注释
IOAllowPowerChange()
或 IOCancelPowerChange()
: 时,构建失败
Undefined symbols for architecture x86_64:
"_IOAllowPowerChange", referenced from:
SleepCallback(void*, unsigned int, unsigned int, void*) in MyAppFrameWork.a(PowerWatcher.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我尝试在“项目设置”>“构建阶段”>“链接二进制文件与库”中添加
IOKit.framework
,这没有改变任何内容。
我错过了什么?
编辑
使用 I/O Kit 中的任何方法都会出现同样的错误,包括:
IONotificationPortGetRunLoopSource()
和 IORegisterForSystemPower()
。
声明变量时没有错误,例如
IONotificationPortRef
确实应该通过链接 IOKit.framework 来解决。您确定将其添加到正确的目标吗?您需要在最终的可执行文件或框架中链接它。静态库无法链接到框架。
我有完全相同的问题,但我不太明白解决方案。在构建设置中,我将其设置为“Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks”
在“将二进制文件与库链接”中的“构建阶段”中,我已像线程启动器一样添加到 IOKit.framework 中。
那么这是错误的吗?我应该添加什么来代替?