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

新手上路,请多包涵

所以我收到错误:“未定义对 sem_open() 的引用”,即使我已经包含了 标头。我所有的 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;
}

原文由 Robin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您需要使用 -lpthread 选项与 pthread 库链接。

原文由 Vlad H 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

库不是标题。标题不是库。这是一个重要的区别。请参阅 头文件和库之间有什么区别?

原文由 William Pursell 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题