2017-09-23 168 views
-1

我在編譯我的代碼時遇到問題,它使用互斥鎖(所以使用pthread鎖和條件)。我試過包括頭文件,用-pthread或-lpthread編譯,但我仍然收到錯誤。幫助將不勝感激。C代碼 - Pthread不編譯

這是誤差輸出:

的函數「的pthread_mutex_lock」 [-Wimplicit函數聲明] 的pthread_mutex_lock(&鎖)隱式聲明; //鎖定 ^ /tmp/cchVS47i.o:在功能getMessage1': hw3.c:(.text+0x22): undefined reference to的pthread_mutex_lock」。 hw3.c :(文本+爲0x50):未定義參照Pthread_mutex_lock' /tmp/cchVS47i.o: In function getMessage2' : hw3.c :(文本+ 0x13e):未定義參考`調用pthread_mutex_consistent_np」 collect2:錯誤:LD返回1退出狀態

,這裏是我的代碼的有關章節(編輯爲清楚起見):

#define _GNU_SOURCE 
#include<stdio.h> 
#include<string.h> 
#include<unistd.h> 
#include<pthread.h> 
#include<stdlib.h> 

char message[1001]; 
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 
pthread_cond_t condition = PTHREAD_COND_INITIALIZER; 

void *getMessage1() 
{ 
Pthread_mutex_lock(&lock); //locked 

.... 
} 

int main(void) 
{ 
pthread_t id1; 
pthread_t id2; 

pthread_create((&id1), NULL, getMessage1, NULL); 
pthread_create((&id2), NULL, getMessage2, NULL); 

... 

return 0; 
} 
+0

你有沒有給過庫作爲參數 –

+0

你是什麼意思的論據?我試過編譯gcc -Wall -Wextra -pedantic -pthread hw3.c -lpthread – Selena

+0

的變體,我以爲你沒有包括庫 –

回答

1

這是你在

有大寫的P

Pthread_mutex_lock(&lock); //locked

在函數getmessage1()的開頭。

您的編譯器抱怨在編譯階段沒有看到該函數的聲明。它也在連接階段抱怨。您正在包含所有正確的庫,因爲它不會抱怨任何其他正確輸入的函數。

函數的正確名稱是pthread_mutex_lock()。

儘管編譯器對它們發出警告,但可以使用沒有聲明的函數。在更現代的C(99)版本中,這已被棄用。

+0

謝謝,但我實際上仍然遇到錯誤。當我刪除大寫字母p並使用gcc -Wall -Wextra -pedantic -pthread hw3.c -lpthread 編譯時,我得到:warning:隱式聲明函數'thread_mutex_lock'[-Wimplicit-function-declaration] thread_mutex_lock(&lock); //鎖定 /tmp/ccGZwoMv.o:在函數'getMessage2'中: (.text + 0x134):未定義引用'thread_mutex_lock' collect2:錯誤:ld返回1退出狀態 – Selena

+0

將其更改爲小p,不要這個函數的正確名字是pthread_mutex_lock()。 –

+0

是的,我的意思是我把它改成了一個小的p – Selena