【问题标题】:No matching function call to 'pthread_create' in XcodeXcode 中没有对“pthread_create”的匹配函数调用
【发布时间】:2013-11-25 17:40:27
【问题描述】:

没有对“pthread_create”的匹配函数调用

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

string nextProduced;
string nextConsumed;
char *BUFFER;
int BufferSize = 10;
void putItemIntoBuffer();
string produceItem();
string consumeItem();
void *Producer();
void *Consumer();

pthread_cond_t Buffer_Not_Full=PTHREAD_COND_INITIALIZER;
pthread_cond_t Buffer_Not_Empty=PTHREAD_COND_INITIALIZER;
pthread_mutex_t mVar=PTHREAD_MUTEX_INITIALIZER;

int main()
{
pthread_t pro, con;

BUFFER=(char *) malloc(sizeof(char) * BufferSize);

pthread_create(&pro,NULL,Producer,NULL);// Creates threads 

pthread_create(&con,NULL,Consumer,NULL);// Creates threads 

pthread_join(pro,NULL);

pthread_join(con,NULL);


return 0;

}

Xcode 给我一个错误,“没有对 'pthread_create' 的匹配函数调用”。我不知道我做错了什么。任何帮助将不胜感激。

我能够编译它,但我现在收到了这条消息。 我不知道问题是什么。 线程1,队列:com.apple.main-thread

libsystem_c.dylib`strlen:
0x7fff8d8364e0:  pxor   %xmm0, %xmm0
0x7fff8d8364e4:  movl   %edi, %ecx
0x7fff8d8364e6:  movq   %rdi, %rdx
0x7fff8d8364e9:  andq   $-16, %rdi
0x7fff8d8364ed:  orl    $-1, %eax
0x7fff8d8364f0:  pcmpeqb(%rdi), %xmm0 Thread 1:EXC_ACCESS (code=1, address=0x0) //line in question
0x7fff8d8364f4:  andl   $15, %ecx
0x7fff8d8364f7:  shll   %cl, %eax
0x7fff8d8364f9:  pmovmskb%xmm0, %ecx
0x7fff8d8364fd:  andl   %eax, %ecx
0x7fff8d8364ff:  je     0x7fff8d83650b            ; strlen + 43
0x7fff8d836501:  bsfl   %ecx, %eax
0x7fff8d836504:  subq   %rdx, %rdi
0x7fff8d836507:  addq   %rdi, %rax
0x7fff8d83650a:  ret    
0x7fff8d83650b:  pxor   %xmm0, %xmm0
0x7fff8d83650f:  addq   $16, %rdi
0x7fff8d836513:  movdqa (%rdi), %xmm1
0x7fff8d836517:  addq   $16, %rdi
0x7fff8d83651b:  pcmpeqb%xmm0, %xmm1
0x7fff8d83651f:  pmovmskb%xmm1, %ecx
0x7fff8d836523:  testl  %ecx, %ecx
0x7fff8d836525:  je     0x7fff8d836513            ; strlen + 51
0x7fff8d836527:  subq   $16, %rdi
0x7fff8d83652b:  jmp    0x7fff8d836501            ; strlen + 33

【问题讨论】:

  • 传递给pthread_create的函数指针应该是一个带有void*参数的函数。您可以尝试更改ProducerConsumer 来执行此操作吗?即void *Producer(void* arg);
  • 以后在发布有关编译器或链接器错误的问题时,请提供completeunedited 错误日志。通常有更多消息可能有助于回答问题。
  • @simonc 有帮助,但现在我得到了线程 1,队列:com.apple.main-thread

标签: c++ ios xcode parameters pthreads


【解决方案1】:

你的生产者和消费者函数的签名应该如下:

void *Producer(void *data);
void *Consumer(void *data);

我相信您也需要传递 attributes 参数。请参阅 Apple's Documentation 了解一个很好的例子。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多