因此,即使我包含了semaphore.h头文件,我也收到了错误:“未定义的对sem_open()的引用”。同样的事情也发生在我所有的pthread函数调用上(互斥、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;
}发布于 2011-02-07 07:22:33
你需要链接pthread lib,使用-lpthread选项。
发布于 2011-02-07 07:21:01
包括头文件并不会告诉ld关于库的信息。您需要将-lrt添加到编译命令行中。对于线程,您需要-lpthread或-pthread,具体取决于您的平台。
库不是头文件。标头不是库。这是一个重要的区别。请参阅What's the difference between a header file and a library?
发布于 2015-05-18 22:28:52
Ubuntu中的工作选项是-lpthread。但是,如果您在suse或其他系统上工作,正确的选择是-lrt。Linux Programmin Interface一书也提到-lrt是正确的选择。
https://stackoverflow.com/questions/4916881
复制相似问题