Почему статические функции удаляют неопределенные символы в XCode? - PullRequest
7 голосов
/ 07 октября 2011

Я пытаюсь использовать комплект ввода / вывода и правильно подключился к комплекту ввода / вывода.

Когда я использую функцию в наборе ввода / вывода и не вызываю ее в статической функции, я получаю следующую ошибку Undefined symbols for architecture x86_64.

Вот пример для подавления ошибки

static void test(void)
{
    if (IORegisterForSystemPower(...)) 
    {

    }
}

Вот пример, который может вызвать ошибку.

void test(void)
{
    if (IORegisterForSystemPower(...)) 
    {

    }
}

Любые предложения относительно того, почему это происходит?

EDIT:

Вот точные сообщения об ошибках:

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)

1 Ответ

2 голосов
/ 07 октября 2011

Хорошо, у меня есть один сценарий, когда это может произойти. Если статическая функция никогда не вызывается, вы не получите ошибку времени ссылки.

Например, я написал простой файл c с этой функцией, а undef_foobar не определен:

static int foobar (void) 
{
    undef_foobar ();
}

Теперь, если из моего main() вызывается foobar(), я получаю ошибку:

Undefined symbols for architecture x86_64:
  "_undef_foobar", referenced from:

Если функция не вызывается вообще из этого файла c, ошибок компоновщика нет.

...