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

pthread_mutexattr_setpshared符号未定义,添加-lpthread无效如何解决

问题原因
  • -c 编译参数的作用是仅生成目标文件、不执行链接流程,因此你在编译mem_manager.o、my_send.o时添加的-lrt、-lpthread属于无效参数,不会生效。
  • 最终生成可执行文件的链接阶段,命令行中缺少-lpthread参数,链接器无法找到pthread相关符号的定义,因此触发DSO missing from command line报错。
解决方案
  1. 清理所有编译目标文件步骤中多余的链接类参数,删除my_send.o、mem_manager.o编译命令里的-lrt、-lpthread。
  2. 将-lrt、-lpthread添加到最终链接可执行文件的参数末尾,调整后的Makefile参考如下:
mpi_bench: mpbench.o flushall.o timer.o my_send.o mem_manager.o
    $(MP_MPI_CC) $(MP_LDFLAGS)  mpbench.o flushall.o timer.o my_send.o mem_manager.o -o $@ $(MPI_LIBS) $(MP_LIBS) -lrt -lpthread

mpbench.o: mpbench.c
    $(MP_MPI_CC) $(MP_CFLAGS) $(MPI_INC) -DMPI -I.. -c  mpbench.c  -o mpbench.o 

timer.o: ../timer.c
    $(MP_MPI_CC) -c -I.. ../timer.c -o $@ 

flushall.o: ../flushall.c
    $(MP_MPI_CC) -c -I.. ../flushall.c -o $@  

my_send.o: my_send.cpp
    $(MP_MPI_CC)  -c -I.. my_send.cpp -o my_send.o
mem_manager.o: mem_manager.cpp
    $(MP_MPI_CC)  -c -I.. mem_manager.cpp -o mem_manager.o

如果使用的是较新版本的GCC/Clang,也可以用-pthread参数替代-lpthread,该参数会自动适配编译、链接阶段的pthread相关配置,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:06:03