C代码 - Pthread不编译

时间:2017-09-23 04:35:38

标签: c pthreads mutex

我在编译代码时遇到问题,代码使用互斥锁(因此使用pthread锁和条件)。我已经尝试包含头文件,使用-pthread或-lpthread进行编译,但我仍然遇到错误。非常感谢帮助。

这是错误输出:

隐式声明函数'Pthread_mutex_lock'[-Wimplicit-function-declaration]   的pthread_mutex_lock(安培;锁); //锁定      ^ /tmp/cchVS47i.o:在函数getMessage1': hw3.c:(.text+0x22): undefined reference to Pthread_mutex_lock'中 hw3.c :(。text + 0x50):对Pthread_mutex_lock' /tmp/cchVS47i.o: In function getMessage2'的未定义引用: hw3.c :(。text + 0x13e):对'Pthread_mutex_lock'的未定义引用 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;
}

1 个答案:

答案 0 :(得分:1)

这是你拥有的资本P

  

的pthread_mutex_lock(安培;锁); //锁定

在函数getmessage1()的开头。

您的编译器抱怨它在编译阶段没有看到该函数的声明。它也在链接阶段抱怨这一点。您包含了所有正确的库,因为它没有抱怨正确输入的任何其他函数。

该函数的正确名称是pthread_mutex_lock()。

在原始的k&amp; r C中,尽管编译器警告它们,但可以使用没有声明的函数。在更现代的C(99)版本中,这已被弃用。