2011-02-06 13 views
11

Me aparece el error: "referencia indefinida a sem_open()" aunque he incluido el encabezado semáforo.h. Lo mismo ocurre con todas mis llamadas a función pthread (mutex, pthread_create, etc.). ¿Alguna idea? Estoy utilizando el siguiente comando para compilar:error sem_open(): "referencia indefinida a sem_open()" en Linux (Ubuntu 10.10)

g ++ '/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; 
} 

Respuesta

15

Necesita un enlace con pthread lib, usando la opción -lpthread.

6

incluyendo la cabecera no le dice a ld sobre la biblioteca. Necesita agregar -lrt a su línea de comandos de compilación. Para enhebrar, necesita -lpthread o -pthread, dependiendo de su plataforma.

La biblioteca no es el encabezado. El encabezado no es la biblioteca. Esta es una distinción importante. Ver What's the difference between a header file and a library?

+0

la respuesta correcta es -rt – cateof

1

La opción de trabajo en Ubuntu es -lpthread. Pero si trabaja en suse u otros sistemas, la opción correcta es -lrt. También el libro Linux Programmin Interface menciona -lrt como la opción correcta.

Cuestiones relacionadas