为什么即使我包含正确的头文件,也会出现“未定义的引用”错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

当我试图编译这个程序时,它失败了:

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

void *WriteNumbers(void *threadArg)
{
    int start, stop;

    start = atoi((char *)threadArg);
    stop = start + 10;

    while (start < stop)
    {
         printf("%d\n", start++);
         sleep(1);
    }
    return 0;
}

int main(int argc, char **argv)
{
        pthread_t thread1, thread2;

        // create the threads and start the printing
        pthread_create(&thread1, NULL, WriteNumbers, (void *)argv[1] );
        pthread_create(&thread2, NULL, WriteNumbers, (void *)argv[2]);

        pthread_join(thread1, NULL);
        pthread_join(thread2, NULL);

        return 0;
}

它给了我以下错误:

tmp/ccrW21s7.o: In function `main':
pthread.c:(.text+0x83): undefined reference to `pthread_create'
pthread.c:(.text+0xaa): undefined reference to `pthread_create'
pthread.c:(.text+0xbd): undefined reference to `pthread_join'
pthread.c:(.text+0xd0): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

为什么它给了我这些未定义的引用错误,即使我已经包括了pthread.h,哪些函数声明了这些功能?

提问于
用户回答回答于

其他人提到你没有使用-lpthread标志链接到pthread库。现代GCC(不知道现代多么现代,我的是4.3.3)只允许你使用-pthread。从手册页:

-pthread 使用pthreads库添加对多线程的支持。此选项为预处理器和链接器设置标志。

用户回答回答于

你可能忘记了链接到Pthreads库(使用-lpthread命令行)。

扫码关注云+社区