Мне нужно выполнить некоторые операции в моем приложении C ++ после сна и пробуждения Mac OS. Мне указывают на использование 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
в «Настройки проекта»> «Фазы сборки»> «Связать двоичные файлы с библиотеками», которые ничего не изменили.
Что мне не хватает?
РЕДАКТИРОВАТЬ
Та же ошибка возникает при использовании любого метода из набора ввода / вывода, в том числе: IONotificationPortGetRunLoopSource()
а также IORegisterForSystemPower()
,
Нет ошибок при объявлении переменных, например, для IONotificationPortRef
Это действительно должно быть решено путем ссылки на IOKit.framework. Вы уверены, что добавили его к нужной цели? Вы должны ссылаться на него в конечном исполняемом файле или фреймворке. Статические библиотеки не могут ссылаться на фреймворки.
Других решений пока нет …