You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下使用线程时出现Command not found错误求助

线程开发编译错误排查与解决

我在用线程开发时搞不懂程序抛出的错误,怀疑是编译方式不正确导致的,希望能得到帮助从中学习。以下是我的代码及错误信息,若需更多信息可补充。

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

int count = 0;
pthread_mutex_t lock;
void* increment(void* arg)
{
    pthread_mutex_lock(&lock);
    count++;
    printf("Increment: %d\n", count);
    pthread_mutex_unlock(&lock);
    return NULL; // 补充:线程函数需返回void*,原代码缺少返回语句会触发未定义行为
}
int main()
{
    pthread_mutex_init(&lock, NULL);
    pthread_t tid1, tid2;
    pthread_create(&tid1, NULL, increment, NULL);
    pthread_create(&tid2, NULL, increment, NULL);
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    pthread_mutex_destroy(&lock);
    return 0;
}

编译错误信息

/tmp/ccXXXXXX.o:在函数‘main’中:
test.c:(.text+0x52):对‘pthread_create’未定义的引用
test.c:(.text+0x73):对‘pthread_create’未定义的引用
test.c:(.text+0x8d):对‘pthread_join’未定义的引用
test.c:(.text+0xa7):对‘pthread_join’未定义的引用
/tmp/ccXXXXXX.o:在函数‘increment’中:
test.c:(.text+0x1f):对‘pthread_mutex_lock’未定义的引用
test.c:(.text+0x43):对‘pthread_mutex_unlock’未定义的引用
/tmp/ccXXXXXX.o:在函数‘main’中:
test.c:(.text+0x3a):对‘pthread_mutex_init’未定义的引用
test.c:(.text+0xc1):对‘pthread_mutex_destroy’未定义的引用
collect2: error: ld returned 1 exit status

问题原因与解决方法

  • 核心问题:使用POSIX线程库(pthread)时,GCC默认不会自动链接线程库,导致编译时出现大量「未定义引用」错误。
  • 正确编译命令:
    gcc test.c -o test -lpthread
    
    其中-lpthread参数用于告诉编译器链接pthread库,解决符号未定义的问题。
  • 代码小修复:原线程函数increment缺少返回语句,虽编译可能通过,但会触发未定义行为,已在代码中补充return NULL;。

内容的提问来源于stack exchange,提问作者JulianTheProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:01:07