3

gcc -Wall -std=c99 hilo.c - ./a.out hilo.c を使用してこの C プログラムを実行しようとすると、次のエラー メッセージが表示されます。

hilo.c: In function ‘func’:
hilo.c:6:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘pthread_t’ [-Wformat]
hilo.c: In function ‘main’:
hilo.c:14:3: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]
/usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)(void)’
hilo.c:15:3: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]
/usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)(void)’
hilo.c:24:3: warning: statement with no effect [-Wunused-value]
/tmp/cchmI5wr.o: In function `main':
hilo.c:(.text+0x52): undefined reference to `pthread_create'
hilo.c:(.text+0x77): undefined reference to `pthread_create'
hilo.c:(.text+0x97): undefined reference to `pthread_join'
hilo.c:(.text+0xab): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

コードの何が問題なのかわからないので、誰かが私を助けてくれれば幸いです。

これはコードです:

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

void func(void){

         printf("thread %d\n", pthread_self());
         pthread_exit(0);

}

   int main(void){

        pthread_t hilo1, hilo2;

        pthread_create(&hilo1,NULL, func, NULL);
        pthread_create(&hilo2,NULL, func, NULL);

        printf("the main thread continues with its execution\n");

        pthread_join(hilo1,NULL);
        pthread_join(hilo2, NULL);

        printf("the main thread finished");

        scanf;

  return(0);

}
4

3 に答える 3

8

コンパイルして、とリンクする必要があります-pthread

gcc -Wall -std=c99 hilo.c -pthread

を使用するだけでは不十分-lpthreadです。この-pthreadフラグは、マルチスレッド環境で正しく機能するように、一部のlibc関数の動作を変更します。

于 2013-03-23T23:59:58.347 に答える
5

pthread ライブラリをリンクしていません。コンパイル:

gcc -Wall -std=c99 hilo.c -lpthread
于 2013-03-23T23:55:30.780 に答える
2

変化する

void func(void)

void* func(void *)

でコンパイルします

gcc hilo.c -pthread

pthread_self()ではないため、印刷時にエラーが発生するだけintです。

于 2013-12-12T07:11:23.260 に答える