1

鉴于此代码:

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

我从 eclipse 得到undefined reference to sem_open

我已经检查了这篇文章,因为这个问题与我的非常相似,但不明白我的错误在哪里,

您能否解释一下我需要在哪里修复它/添加另一个编译命令(如果确实如此)?

非常感激

4

3 回答 3

4

-lpthread编译时需要包含。链接器使用它来将二进制文件与库链接。

其他答案已经涵盖了如何在命令行上执行此操作。

要在 Eclipse 中执行此操作,您需要按照此处的说明进行操作:

在项目属性中,转到:C/C++ Build --> Settings。然后“工具设置”,选择“链接器”下的“库”。您可以在那里添加所有项目库(没有“-l”)。同样在下部,您可以添加自定义路径到搜索库

于 2012-07-16T09:04:17.713 回答
1

链接时,您必须添加标志-pthread-lrt命令行。它就在手册页中。

于 2012-07-16T08:56:01.267 回答
1

正如您链接的问题的第一个答案中所写,您需要以这种方式编译它:

gcc source.c -lpthread

-lrt或者-pthread也会这样做。

于 2012-07-16T08:56:24.490 回答