sem_open doesn't work with Ubuntu : undefined reference to `sem_open'

[亡魂溺海] 提交于 2019-12-13 06:39:35

问题


Given this code :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <semaphore.h>
#include <pthread.h>

#define BUF_SIZE 256
int main()
{
    key_t key;
    char *virtualaddr;
    sem_t *get, *put;
    int shmid;

   const char* messageOne = "Hello world , I'm child number 1\n";
   const char* messageTwo = "Hello world , I'm child number 2\n";

   char buf[BUF_SIZE];

   key = ftok("anyfile",'R');

  shmid = shmget(key,1024,0644|IPC_CREAT);
...
...
shmctl (shmid, IPC_RMID, NULL);
exit(EXIT_SUCCESS);
}

I get from eclipse undefined reference to sem_open .

I've check with this post since this question is very similar to mine , but didn't understand exactly where is my mistake ,

Can you please explain where do I need to fix it / add another compilation command (if this is indeed the case) ?

Much appreciated


回答1:


You need to include -lpthread when compiling. This is used by the linker, to link your binary against the library.

The other answers already cover how to do this on the command line.

To do this in Eclipse, you need to follow the directions here:

In the project properties, go to : C/C++ Build --> Settings. Then "Tool Settings", select "Libraries" under "Linker". You can add all your project libraries there (without the "-l"). Also in the lower part, you can add custom path to search libraries




回答2:


When linking, you have to add the flag -pthread or -lrt to the command line. It's right there in the manual page.




回答3:


As it is written in the first answer in the question you linked, you nedd to compile it in this way:

gcc source.c -lpthread

-lrt or -pthread will do the same.



来源:https://stackoverflow.com/questions/11500879/sem-open-doesnt-work-with-ubuntu-undefined-reference-to-sem-open

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!