1

このコードを考えると:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <semaphore.h>
#include <pthread.h>

#define BUF_SIZE 256
int main()
{
    key_t key;
    char *virtualaddr;
    sem_t *get, *put;
    int shmid;

   const char* messageOne = "Hello world , I'm child number 1\n";
   const char* messageTwo = "Hello world , I'm child number 2\n";

   char buf[BUF_SIZE];

   key = ftok("anyfile",'R');

  shmid = shmget(key,1024,0644|IPC_CREAT);
...
...
shmctl (shmid, IPC_RMID, NULL);
exit(EXIT_SUCCESS);
}

私は日食から取得しundefined reference to sem_openます。

この質問は私の質問と非常に似ているため、この投稿を確認しましたが、私の間違いがどこにあるのか正確にはわかりませんでした。

どこを修正する必要があるか、または別のコンパイル コマンドを追加する必要があるかを説明していただけますか (実際にそうである場合)。

とても有難い

4

3 に答える 3

4

-lpthreadコンパイル時に含める必要があります。これは、ライブラリに対してバイナリをリンクするためにリンカーによって使用されます。

他の回答は、コマンドラインでこれを行う方法をすでにカバーしています。

Eclipse でこれを行うには、次の手順に従う必要があります

プロジェクトのプロパティで、[C/C++ ビルド] --> [設定] に移動します。次に「ツール設定」、「リンカ」の下の「ライブラリ」を選択します。すべてのプロジェクト ライブラリをそこに追加できます ("-l" は使用しません)。また、下部には、ライブラリを検索するためのカスタム パスを追加できます。

于 2012-07-16T09:04:17.713 に答える
1

リンクするときは、フラグを追加する-pthread-lrt、コマンド ラインに追加する必要があります。マニュアルページにあります。

于 2012-07-16T08:56:01.267 に答える
1

リンクした質問の最初の回答に書かれているように、次のようにコンパイルする必要があります。

gcc source.c -lpthread

-lrtまたは-pthread同じことをします。

于 2012-07-16T08:56:24.490 に答える