2011-02-06 13 views
11

तो मैं त्रुटि हो रही है: "sem_open को अपरिभाषित संदर्भ()" भले ही मैंने semaphore.h हेडर को शामिल किया है। एक ही बात मेरे सारे pthread समारोह कॉल (म्युटेक्स, pthread_create, आदि) के लिए हो रहा है। कोई विचार? '/home/robin/Desktop/main.cpp' -ओ '/home/robin/Desktop/main.out'sem_open() त्रुटि: "अपरिभाषित संदर्भ sem_open लिए()" लिनक्स (Ubuntu 10.10) पर

#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; 
} 

उत्तर

15

-lpthread विकल्प का उपयोग करके आपको pthread lib के साथ लिंक की आवश्यकता है।

6

हैडर सहित

जी ++: मैं निम्न आदेश का उपयोग कर रहा संकलित करने के लिए लाइब्रेरी के बारे में एलडी नहीं बताता है। आपको अपनी संकलन कमांड लाइन में -lrt जोड़ने की आवश्यकता है। थ्रेडिंग के लिए, आपको अपने प्लेटफ़ॉर्म के आधार पर या तो -lpthread या -ththread की आवश्यकता है।

पुस्तकालय हेडर नहीं है। हेडर लाइब्रेरी नहीं है। यह एक महत्वपूर्ण अंतर है। What's the difference between a header file and a library?

+0

सही जवाब -rt है – cateof

1

उबंटू में कार्य विकल्प -lpthread है। लेकिन अगर आप suse या अन्य सिस्टम पर काम सही विकल्प -lrt है। इसके अलावा पुस्तक लिनक्स programmin इंटरफ़ेस सही विकल्प के रूप में -lrt का उल्लेख है।

संबंधित मुद्दे