在 XCode 上使用 I/O Kit 中的方法时构建失败

问题描述 投票:0回答:2

我需要在 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

c++ xcode macos build iokit
2个回答
0
投票

确实应该通过链接 IOKit.framework 来解决。您确定将其添加到正确的目标吗?您需要在最终的可执行文件或框架中链接它。静态库无法链接到框架。


0
投票

我有完全相同的问题,但我不太明白解决方案。在构建设置中,我将其设置为“Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks”

在“将二进制文件与库链接”中的“构建阶段”中,我已像线程启动器一样添加到 IOKit.framework 中。

那么这是错误的吗?我应该添加什么来代替?

© www.soinside.com 2019 - 2024. All rights reserved.