2011-10-07 21 views
7

G/Ç kitini kullanmaya çalışıyorum ve G/Ç kitine doğru şekilde bağlandım.Statik işlevler Xcode'daki tanımsız sembolleri neden engeller?

G/Ç kitinde bir işlev kullandığımda ve onu statik işlev içinde aramadığımda, şu hata iletisini alıyorum Undefined symbols for architecture x86_64. İşte

hatayı

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

    } 
} 
İşte

hataya neden olur örneğidir bastırmak için bir örnektir.

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

    } 
} 

Bunun neden olduğuyla ilgili herhangi bir öneriniz var mı?

DÜZENLEME: bu olabilir bir senaryo var

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

Hata iletilerinin tam listesini yapıştırabilir misiniz? Örneğin, IORegisterForSystemPower sembolünden şikayet ediyor mu? – jman

+0

Hata iletileri ekledim. Lütfen yukarıya bakın. – David

cevap

2

Okay: Burada

tam hata mesajlarıdır. Statik işlev hiçbir zaman çağrılmazsa, bu bağlantı zamanı hatası almazsınız. Örneğin

, bu işlevi ile basit c dosyası yazdım ve undef_foobar tanımlanmadı:

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

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

Şimdi foobar() benim main() aranırsa, hatası alıyorum

İşlev, bu c dosyasından hiç çağrılmadıysa, hiçbir bağlayıcı hatası yoktur.

+0

Örneğinizi denedim ve Xcode, undefined işlevini 'undef_foobar' C99'da geçersiz 'tanımsız işleviyle uyarır. Aynı bağlayıcı sorunları alıp alamayacağınızı görmek için I/O kitinden bir işlevi bağlamaya ve sonra bir işlev çağırmaya çalışır mısınız? – David

İlgili konular