web-dev-qa-db-ja.com

pthread_createへの未定義の参照

私はこのコードを持っています:

#include <stdio.h>
#include <pthread.h>

void* cuoco(void* arg)
{
    fprintf(stderr,"Inizio codice cuoco\n");
    fprintf(stderr,"Fine codice cuoco\n");
    return NULL;
}

void* cameriere(void* arg)
{
    fprintf(stderr,"Inizio codice cameriere\n");
    fprintf(stderr,"Fine codice cameriere\n");
    return NULL;
}

void* cliente(void* arg)
{
    fprintf(stderr,"Inizio codice cliente\n");
    fprintf(stderr,"Fine codice cliente\n");
    return NULL;
}

int main(int argc, char* argv[])
{
    void* (*routine)(void*);
    routine=cuoco;
    pthread_t thread_cuoco,thread_cameriere,thread_cliente;
    pthread_create(&thread_cuoco,NULL,routine,NULL);
    return 0;
}

そしてコンパイラオプションに-lpthreadを挿入します
しかし、それは言う:
"pthread_createへの未定義の参照"
ubuntu 10.10を使用しているので、すでにpthreadライブラリがインストールされているので、このエラーの理由がわかりません。

7
Ramy Al Zuhouri

最後のコンパイラフラグとして-lpthreadを使用します。

例:gcc -o sample sample.c -lpthread

29
user529758

コンパイラコマンドが表示されないので、-lpthreadが終了していないのではないかと思います。ライブラリは、コンパイラコマンドの最後に配置する必要があります。

gcc main.c -lpthread

ただし、-pthreadが他の設定を追加する可能性があるため(たとえば、マクロ-lpthreadの定義など)、-pthreadの代わりに_REENTRANTを使用してください。

12
hmjd

次のコマンドを使用します。

gcc -pthread -o main main.c

4

Eclipseでは、文字列pthreadを追加する必要があります。

Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC Linker -> Libraries -> Libraries (-l) -> Add -> pthread

この後、プロジェクトをビルドできます。

0
ognjenkl