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

WSL下编译C程序出现pthread_create未定义引用错误求助

解决WSL Ubuntu 18.04下pthread_create未定义引用的问题

这种跨平台编译的坑我踩过好几次,咱们先从最常见的核心原因说起:

关键问题:GCC链接库的顺序要求

你遇到的问题大概率是链接顺序不对。Mac上的Clang(或Mac版GCC)对库的链接顺序要求比较宽松,但Ubuntu 18.04自带的GCC版本(一般是7.x系列)对链接顺序很严格:依赖某个库的目标文件必须放在该库选项的前面。

看你的Makefile链接命令:

$(CC) $(LINKOPTS) -o $@ $^

这里LINKOPTS里的-lpthread放在了目标文件$^(也就是calc.o、smp3_tests.o、testrunner.o)的前面。链接器会按顺序处理:先加载-lpthread,这时候还没遇到需要用到pthread符号的目标文件,就会跳过这个库;等后面处理目标文件时,发现pthread_create未定义,再回头找库已经晚了,所以报错。

解决办法:调整链接顺序

把-lpthread移到目标文件的后面就行,有两种改法:

  1. 直接修改链接命令(同时删掉原LINKOPTS里的-lpthread避免重复):
LINKOPTS = -Wall -g -ggdb
calc: calc.o smp3_tests.o testrunner.o
	$(CC) $(LINKOPTS) $^ -o $@ -lpthread
  1. 或者手动执行这条命令先验证:
gcc -Wall -g -ggdb calc.o smp3_tests.o testrunner.o -o calc -lpthread

如果能成功编译,就说明确实是顺序问题。

其他排查方向

如果调整顺序后还是报错,可以检查这两点:

  • 确认Ubuntu 18.04上安装了pthread的开发库:
    sudo apt-get install libpthread-dev
    
    虽然默认可能已经安装,但万一缺失也会导致链接失败。
  • 检查Makefile里有没有其他地方覆盖了LINKOPTS或者CC变量,导致-lpthread没被正确加入链接命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:57:28