-1

可能重复:
在 linux 中未定义对 pthread_create 的引用(c 编程)

有以下程序:

void *thread(void *vargp);

int main() {
  pthread_t tid;

  pthread_create(&tid, NULL, thread, NULL);
  exit(0);
}

/* thread routine */
void *thread(void *vargp) {
  sleep(1);
  printf("Hello, world!\n");
  return NULL;
}

我应该纠正它。我已经添加了左侧的包含:

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

但我仍然收到以下错误:

/tmp/ccHwCS8c.o: In function `main':
1.c:(.text+0x29): undefined reference to `pthread_create'
collect2: ld returned output state 1

我尝试像答案所说的那样在编译器中添加-lpthread,但我仍然得到这个错误代码:

@lap:~$ gcc -Wall -lpthread 1.c -o uno

/tmp/ccl19SMr.o: In function `main':
1.c:(.text+0x29): undefined reference to `pthread_create'
collect2: ld returned exit state 1
4

3 回答 3

3

在您的编译/链接中添加“-lpthread”。

于 2012-12-09T17:17:31.493 回答
2

您需要使用-lpthread标志编译它才能链接libpthread到您的可执行文件。

您还应该添加pthread_join()函数以让您的主线程等待新线程结束。在您当前的代码中,您不会看到Hello World因为主线程结束将导致所有子线程退出。

于 2012-12-09T17:53:05.537 回答
2

您需要-pthread在编译时明确提及该选项。没有这个链接器就无法找到 pthread 库的引用。这样做:

gcc -Wall -pthread test.c -o test.out

于 2012-12-09T17:20:45.917 回答