0

このコンパイルエラーを解決する方法を教えてくれる人がいます:

tarek.c: In function ‘main’:
tarek.c:33: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/ccAEGS6k.o: In function `main':
tarek.c:(.text+0x45): undefined reference to `pthread_mutexattr_init'
tarek.c:(.text+0x56): undefined reference to `pthread_mutexattr_setpshared'
collect2: ld returned 1 exit status

このプログラムをコンパイルすると(2つのプロセスがクリティカルセクションを使用して同じ値を共有しました):

#include <sys/types.h>
#include <pthread.h>
#include <sys/mman.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

int main () {

int stat;

pthread_mutex_t *mutex = (pthread_mutex_t*)mmap (0, sizeof (pthread_mutex_t) + sizeof (long),PROT_READ | PROT_WRITE,
                            MAP_SHARED ,-1, 0);

long *data = (long*)(&mutex[1]); /* map 'data' after mutex */
int pid;

pthread_mutexattr_t attr;
pthread_mutexattr_init (&attr);
pthread_mutexattr_setpshared (&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init (mutex, &attr);

*data = 0;

pid = fork ();

pthread_mutex_lock (mutex);
(*data)++;
pthread_mutex_unlock (mutex);

if (!pid) /* child exits */
exit (0);
else
waitpid (pid, &stat, 0);
printf ("data is %ld\n", *data);

}
4

3 に答える 3

3

library を明示的に言及し-pthreadます。

次のようにコンパイルします。

gcc -Wall program.c -o program -pthread

あなたの悩みを解決します

`tarek.c:(.text+0x45): undefined reference to `pthread_mutexattr_init'
tarek.c:(.text+0x56): undefined reference to `pthread_mutexattr_setpshared'`

exit()インクルード用#include <stdlib.h>

waitpid()インクルード用#include <sys/wait.h>

さらにman exit()man waitpid()

于 2012-11-27T08:29:05.993 に答える
1

エラーを解決するには、次のexit()ことを行う必要があります#include <stdlib.h>

于 2012-11-27T08:35:55.980 に答える
1

-lpthreadリンクコマンドを追加してビルドするとき

gcc -o program program.c -lpthread
于 2012-11-27T08:28:49.280 に答える