2011-10-07 15 views
7

Estoy intentando utilizar el kit de E/S y he vinculado correctamente el kit de E/S.¿Por qué las funciones estáticas eliminan símbolos indefinidos en Xcode?

Cuando uso una función en el kit de E/S y no la llamo dentro de una función estática, aparece el siguiente error Undefined symbols for architecture x86_64.

Aquí se muestra un ejemplo para suprimir el error

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

    } 
} 

Aquí hay un ejemplo que hará que el error.

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

    } 
} 

Cualquier sugerencia en cuanto a por qué ocurre esto?

EDIT:

Estos son los mensajes de error exactos:

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

¿Puedes pegar la lista completa de mensajes de error? Por ejemplo, ¿se queja del símbolo IORegisterForSystemPower? – jman

+0

He agregado mensajes de error. Por favor mira arriba. – David

Respuesta

2

yo bien se un escenario cuando esto pueda suceder. Si nunca se llama a la función estática, no obtendrá ese error de tiempo de enlace.

Por ejemplo, escribí un archivo c sencillo con esta función, y undef_foobar no está definido:

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

Ahora, si foobar() se llama de mi main(), me sale el error:

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

Si la función no se llama en absoluto desde este archivo c, no hay errores de enlazador.

+0

He probado su ejemplo y Xcode me advierte de la función indefinida 'Declaración implícita de función" undef_foobar "no es válida en C99'. ¿Te importaría intentar vincular y luego llamar a una función desde el kit de E/S para ver si obtienes los mismos problemas del vinculador? – David

Cuestiones relacionadas