undefined reference to `pthread_create' 怎么解决?

c++语言 专栏收录该内容
1 篇文章 0 订阅

问题, 过去的正确答案,现在已经不行了

使用make编译c++文件报错。

/usr/bin/ld: build/obj/test.o: in function `main':
test.cpp:(.text+0x5ea): undefined reference to `pthread_create'

编译环境ubuntu19.04

gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008
g++ (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008

众多网上答案,比如 https://blog.csdn.net/Desmend__/article/details/88754133
就是在编译选项中添加一个-lpthread

于是makefile添加“-lpthread"之后,如下所示

CXX:=g++
CXXFLAGS := -Wall -g -lpthread
# 省略许多
$(BUILD_DIR)/%: $(SRC_DIR)/%.cpp
	@echo + G++ $@
	@mkdir -p $(BUILD_DIR)
	@echo "$(CXX) $(CXXFLAGS) -o $@ $<"
	@$(CXX) $(CXXFLAGS) -o $@ $<

可以看到 CXXFLAGS大部分时间是被放到编译命令的中间的

编译时的最终命令如下

g++ -Wall -g -lpthread -o build/test src/test.cpp

但是依然报错: undefined reference to `pthread_create’

解决办法

  1. -lpthread 与源文件放在一起

https://stackoverflow.com/questions/1662909/undefined-reference-to-pthread-create-in-linux

g++ -Wall -g -o build/test src/test.cpp  -lpthread
  1. 使用-pthread进行连接

https://stackoverflow.com/questions/8264701/gcc-lpthread-not-working

g++ -Wall -pthread -g -o build/test src/test.cpp 

具引用说,-lpthread连接的仅仅是是libpthread, 但是-pthread连接的是libpthread和其他很多东西。

总结

网上很多文章其实没有,只是需要主要-lpthread的添加位置,但是在makefile中,我们往往不直接添加-lpthread所以无法直接决定其添加在什么地方, 所以使用“-pthread”更好。

©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

家人是最好的礼物

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值