2011-02-06 24 views
11

yüzden hatayı alıyorum: "sem_open tanımsız başvuru()" Ben semaphore.h başlığı içermesi olmasına rağmen. Tüm pthread işlev çağrıları için aynı şey gerçekleşiyor (mutex, pthread_create, vb.). Düşüncesi olan var mı? Ben derlemek için aşağıdaki komutu kullanıyorum:sem_open() hatası: "tanımsız başvuru sem_open için()" linux (Ubuntu 10.10) üzerinde

g ++ başlığındaki dahil '/home/robin/Desktop/main.cpp' -o '/home/robin/Desktop/main.out'

#include <iostream> 
using namespace std; 
#include <pthread.h> 
#include <semaphore.h> 
#include <fcntl.h> 

const char *serverControl = "/serverControl"; 
sem_t* semID; 

int main (int argc, char *argv[]) 
{ 
    //create semaphore used to control servers 
    semID = sem_open(serverControl,O_CREAT,O_RDWR,0); 
    return 0; 
} 

cevap

15

bakınız.

6

kütüphane hakkında bilgi vermez. Derleme komut satırınıza -lrt eklemeniz gerekir. İş parçacığı için, platformunuza bağlı olarak -lpthread veya -pthread'e ihtiyacınız vardır.

kütüphane başlık değildir. Başlık kütüphane değildir. Bu önemli bir ayrımdır. Sen -lpthread seçeneğini kullanarak, pthread lib ile bağlantı gerekir What's the difference between a header file and a library?

+0

doğru cevap -rt olduğunu – cateof

1

Ubuntu'daki çalışma seçeneği -lpthread'dur. Eğer Suse veya diğer sistemleri üzerinde çalışabilir Ama eğer doğru seçenek -lrt olduğunu. Ayrıca kitap Linux PROGRAMLAM Arayüz doğru seçenek olarak -lrt bahseder.

İlgili konular