2013-02-27 19 views
5

Fedora 17 (GCC ile) üzerinde eclipse kullanıyorum ve pthread.h dahil olsa bile ve gcc derleme komut satırında varsa, pthread_create() öğesinde tanımlanmamış bir başvuru sahibiyim. İşte pthread library undefined reference

..

void* repair() 
{ 
    int var; 
    for (var = 0; var < NB_ITER ; var += 2) 
    { 
     printf("PAIR : %d\n", var); 
    } 

return NULL; 
} // pair 

void exo03() 
{ 
    pthread_t id1; 
    pthread_create(&id1, NULL, &repair, NULL); 
} 

linux üzerinde :)

+1

Pthread kitaplığı ile bağlantı kurmayı unutmuşsunuzdur. Derleme komutunda sonuncu olarak '-lpthread' ekleyin. –

+0

Tam bir örnek ve derleyici komutu + hatalarının tam notunu verir misiniz? – simonc

cevap

8

yardımcı olduğunuz için teşekkür ederiz ihtimale karşı benim kodudur, FreeBSD (ve diğer bazı * nix tatlar) Eğer derleyici seçeneği kullanmalısınız -pthread ve bir pthread kütüphanesiyle bağlantı kurmaya çalışmıyor. eclipse için

:

Eclipse gcc derleme -pthread argüman koymak için yapılandırılmamış. Bu sorunu çözmek için, Menü:> GCC C derleyicisi - - -

c/C++ derleme Özellikler>

Projesi> Çeşitli

başında içine “-pthread” argümanı Ekle “ Diğer Bayraklar: pthread”

Ayrıca gidin -> Ayarlar -

c/C++ yapı -> GCC C Linker> Kütüphaneler

Ve

include” Kütüphaneyi diğer kütüphanelere. Uygula'ya tıklayın ve projeyi yeniden oluşturun. Pthreads şimdi çalışmalı. man gcc itibaren

:

-pthread: pthreads kütüphanesi ile çoklu kullanım için destek ekler. Bu seçenek, hem önişlemci hem de bağlayıcı için bayrakları ayarlar.

buldum bir explanation here:

GCC

, derleyici önişlemci/ve/bağlayıcı hem Posix iş parçacığı ile derleme etkinleştirmek için yönetir -pthread (aka -pthreads) seçeneği. önişlemci Posix'e bazı makrolar sürümlerini dişler kullanımı/etkinleştirme/tanımlar (ya da Posix'e mesajları mantık sağlamak için koşullu derleme gerçekleştirmek) ve bağlayıcı

Ancak başka libpthread evre karşı elde edilen nesne bağlantı, -lpthread spesifik olacaktır sadece linker'e libre kütüphanesine karşı harici referanslarını çözmeye çalışmasını söyler. aynı şekilde -lm, linker'e libm kütüphanesine karşı harici referanslarını çözümlemeye çalışmasını söyler. -lpthread için, kritik makrolar açılmamış olduğundan, kodunuz libpthread'e harici referanslar içermeyebilir, Posix iş parçacığı kodunu yazmış olsanız bile.

+0

Neden libpthread ile bağlantılandırılmıyor? –

+0

@ bash.d: çünkü '-pthread 'seçeneği olmadan, compîler ve linker doğru pthread kütüphanesini bulamazlar :) –

+0

Tamam, teşekkürler, bunu unutmuştum! –

4

Libpthread ile bağlantı kurdunuz mu?

$> gcc ... -lpthread 
İlgili konular