我正在尝试使用I / O套件并正确连接到I / O套件。
当我在I / O工具包中使用函数而不在静态函数中调用它时,我收到以下错误Undefined symbols for architecture x86_64
。
这是一个抑制错误的例子
static void test(void)
{
if (IORegisterForSystemPower(...))
{
}
}
以下是导致错误的示例。
void test(void)
{
if (IORegisterForSystemPower(...))
{
}
}
有关为何发生这种情况的任何建议?
编辑:
以下是确切的错误消息:
Undefined symbols for architecture x86_64:
"_IORegisterForSystemPower", referenced from:
_registerNotificaitonUsingIOKit in AppDelegate.o
"_IONotificationPortGetRunLoopSource", referenced from:
_registerNotificaitonUsingIOKit in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
答案 0 :(得分:2)
好的,我有一个可能发生的情况。如果从未调用静态函数,则不会出现链接时间错误。
例如,我使用此函数编写了一个简单的c文件,并且未定义undef_foobar
:
static int foobar (void)
{
undef_foobar ();
}
现在,如果从foobar()
调用main()
,我会收到错误消息:
Undefined symbols for architecture x86_64:
"_undef_foobar", referenced from:
如果在该c文件中根本没有调用该函数,则没有链接器错误。