sem_open() error: "undefined reference to sem_open()" on linux (Ubuntu 10.10)
Solution 1
You need link with pthread lib, using -lpthread
option.
Solution 2
Including the header does not tell ld about the library. You need to add -lrt to your compilation command line. For threading, you need either -lpthread or -pthread, depending on your platform.
The library is not the header. The header is not the library. This is an important distinction. See What's the difference between a header file and a library?
Solution 3
The working option in Ubuntu is -lpthread. But if you work on suse or other systems the correct option is -lrt. Also the book Linux Programmin Interface mentions -lrt as the correct option.
Robin
Updated on May 19, 2020Comments
-
Robin almost 4 years
So I am getting the error: "undefined reference to sem_open()" even though I have include the semaphore.h header. The same thing is happening for all my pthread function calls (mutex, pthread_create, etc). Any thoughts? I am using the following command to compile:
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; }