我在编译代码时遇到问题,代码使用互斥锁(因此使用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;
}
答案 0 :(得分:1)
这是你拥有的资本P
的pthread_mutex_lock(安培;锁); //锁定
在函数getmessage1()的开头。
您的编译器抱怨它在编译阶段没有看到该函数的声明。它也在链接阶段抱怨这一点。您包含了所有正确的库,因为它没有抱怨正确输入的任何其他函数。
该函数的正确名称是pthread_mutex_lock()。
在原始的k&amp; r C中,尽管编译器警告它们,但可以使用没有声明的函数。在更现代的C(99)版本中,这已被弃用。