2011-10-07 17 views
7

Próbuję użyć zestawu I/O i poprawnie podłączyć do zestawu I/O.Dlaczego funkcje statyczne eliminują niezdefiniowane symbole w Xcode?

Gdy korzystam z funkcji zestawu I/O i nie wywołuję jej w ramach funkcji statycznej, pojawia się następujący błąd: Undefined symbols for architecture x86_64.

Oto przykład do tłumienia błędu

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

    } 
} 

Oto przykład, który spowoduje błąd.

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

    } 
} 

Jakieś sugestie, dlaczego tak się dzieje?

EDIT:

Oto dokładne komunikaty o błędach:

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

Czy możesz wkleić pełną listę komunikatów o błędach? Na przykład czy narzeka na symbol IORegisterForSystemPower? – jman

+0

Dodałem komunikaty o błędach. Zobacz powyżej. – David

Odpowiedz

2

Dobra mam jeden scenariusz, kiedy to może się zdarzyć. Jeśli funkcja statyczna nigdy nie zostanie wywołana, nie otrzymasz błędu czasu połączenia.

Na przykład, napisałem prosty plik C z tej funkcji, a undef_foobar nie jest zdefiniowana:

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

Teraz, jeśli foobar() jest wywoływana z mojej main(), pojawia się błąd:

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

Jeśli funkcja nie jest wywoływana w ogóle z tego pliku c, nie ma błędów łącznika.

+0

Próbowałem twojego przykładu, a Xcode ostrzega mnie przed niezdefiniowaną funkcją 'Niejawna deklaracja funkcji" undef_foobar "jest niepoprawna w C99'. Czy mógłbyś spróbować połączyć i wywołać funkcję z zestawu I/O, aby sprawdzić, czy masz te same problemy z linkerem? – David

Powiązane problemy