sem_open()错误:linux上的“对sem_open()的未定义引用”(Ubuntu 10.10)

时间:2011-02-06 23:17:35

标签: c++ linux semaphore

所以我收到错误:“对sem_open()的未定义引用”,即使我已经包含了semaphore.h头文件。我的所有pthread函数调用(mutex,pthread_create等)都发生了同样的事情。有什么想法吗?我使用以下命令编译:

g ++'/ home / rbin /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 个答案:

答案 0 :(得分:19)

您需要使用-lpthread选项链接到pthread lib。

答案 1 :(得分:6)

包含标题不会告诉ld有关库的信息。您需要将-lrt添加到编译命令行。对于线程,您需要-lpthread或-pthread,具体取决于您的平台。

库不是标题。标题不是库。这是一个重要的区别。见What's the difference between a header file and a library?

答案 2 :(得分:2)

Ubuntu中的工作选项是 -lpthread 。但是如果您使用suse或其他系统,正确的选项是 -lrt 。此书 Linux Programmin接口还提到 -lrt 作为正确选项。