首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sem_open()错误:“未定义对sem_open()的引用”(Ubuntu10.10)

sem_open()错误:“未定义对sem_open()的引用”(Ubuntu10.10)
EN

Stack Overflow用户
提问于 2011-02-07 07:17:35
回答 3查看 27.3K关注 0票数 14

因此,即使我包含了semaphore.h头文件,我也收到了错误:“未定义的对sem_open()的引用”。同样的事情也发生在我所有的pthread函数调用上(互斥、pthread_create等)。有什么想法吗?我正在使用以下命令进行编译:

g++ '/home/robin/Desktop/main.cpp‘-o '/home/robin/Desktop/main.out’

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-07 07:22:33

你需要链接pthread lib,使用-lpthread选项。

票数 23
EN

Stack Overflow用户

发布于 2011-02-07 07:21:01

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

库不是头文件。标头不是库。这是一个重要的区别。请参阅What's the difference between a header file and a library?

票数 6
EN

Stack Overflow用户

发布于 2015-05-18 22:28:52

Ubuntu中的工作选项是-lpthread。但是,如果您在suse或其他系统上工作,正确的选择是-lrtLinux Programmin Interface一书也提到-lrt是正确的选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4916881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档