Ошибка sem_open (): «неопределенная ссылка на sem_open ()» в Linux (Ubuntu 10.10) - PullRequest
13 голосов
/ 07 февраля 2011

Итак, я получаю сообщение об ошибке: «неопределенная ссылка на 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;
}

Ответы [ 3 ]

19 голосов
/ 07 февраля 2011

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

6 голосов
/ 07 февраля 2011

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

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

2 голосов
/ 18 мая 2015

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

...