c - Linux 中对 pthread_create 的 undefined reference

我从 https://computing.llnl.gov/tutorials/pthreads/ 网上找到了以下演示

#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS     5

void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;
   printf("Hello World! It's me, thread #%ld!\n", tid);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;
   for(t=0; t<NUM_THREADS; t++){
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
      }
   }
   pthread_exit(NULL);
}

但是当我在我的机器上编译它(运行 Ubuntu Linux 9.04)时,我收到以下错误:

corey@ubuntu:~/demo$ gcc -o term term.c
term.c: In function ‘main’:
term.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cc8BMzwx.o: In function `main':
term.c:(.text+0x82): undefined reference to `pthread_create'
collect2: ld returned 1 exit status

这对我来说没有任何意义,因为 header 包含 pthread.h,它应该具有 pthread_create 函数。有什么想法吗?

最佳答案

对于 Linux,正确的命令是:

gcc -pthread -o term term.c

一般来说,库应该遵循命令行上的源和对象,-lpthread 不是一个“选项”,它是一个库规范。在仅安装了 libpthread.a 的系统上,

gcc -lpthread ...

将无法链接。

https://stackoverflow.com/questions/1662909/

相关文章:

python - 超出相对导入中的顶级包错误

c - 什么是 LD_PRELOAD 技巧?

python - 如何在 Python 中实现 Softmax 函数

python - 映射python字典中的值

linux - Linux 内核中可能/不太可能的宏是如何工作的,它们有什么好处?

python - 在 Python 中使用多处理时我应该如何记录?

python - 使用多处理 Pool.map() 时无法 pickle

python - 为什么 PEP-8 指定最大行长度为 79 个字符?

linux - 如何从 Linux shell 运行具有与当前不同工作目录的程序?

linux - 如何让 grep 打印每个匹配行下方和上方的行?