2011-02-06 10 views
11

したがって、semaphore.hヘッダをインクルードしていても、 "未定義のsem_open()"というエラーが発生します。同じことがすべてのpthread関数呼び出し(mutex、pthread_createなど)で起こっています。何かご意見は?私はコンパイルするには、次のコマンドを使用しています:sem_open()エラー: "undefined reference to sem_open()" on Linux(Ubuntu 10.10)

グラムを++ヘッダを含む '/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; 
} 

答えて

15

-lpthreadオプションを使用して、pthread libとのリンクが必要です。

6

をライブラリについてldには通知しません。コンパイルコマンドラインに-lrtを追加する必要があります。スレッド化の場合は、プラットフォームに応じて、-lpthreadまたは-pthreadのいずれかが必要です。

ライブラリはヘッダーではありません。ヘッダーはライブラリではありません。これは重要な違いです。 What's the difference between a header file and a library?

+0

正解は-rtです。 – cateof

1

Ubuntuの作業オプションは、-lpthreadです。しかし、suseや他のシステムで作業する場合、正しいオプションは-lrtです。また、書籍Linux Programmin Interfaceには、正しいオプションとして-lrtが記載されています。

関連する問題