Ошибка sem_open(): "undefined ссылка на sem_open()" на linux (Ubuntu 10.10)

Итак, я получаю сообщение об ошибке: "undefined ссылка на sem_open()", хотя у меня есть заголовок semaphore.h. То же самое происходит для всех моих вызовов функции pthread (mutex, pthread_create и т.д.). Есть предположения? Я использую следующую команду для компиляции:

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

Ответ 1

Вам нужна ссылка с pthread lib, используя опцию -lpthread.

Ответ 2

Включение заголовка не сообщает ld о библиотеке. Вам нужно добавить -lrt в свою командную строку компиляции. Для потоковой передачи вам потребуется либо -lpthread, либо -pthread, в зависимости от вашей платформы.

Библиотека не является заголовком. Заголовок не является библиотекой. Это важное различие. См. В чем разница между файлом заголовка и библиотекой?

Ответ 3

Рабочий параметр в Ubuntu -lpthread. Но если вы работаете с suse или другими системами, правильный параметр -lrt. Также в книге Linux Programmin Interface упоминается -lrt как правильный вариант.