pthread_mutexattr_setpshared符号未定义,添加-lpthread无效如何解决
问题原因
-c编译参数的作用是仅生成目标文件、不执行链接流程,因此你在编译mem_manager.o、my_send.o时添加的-lrt、-lpthread属于无效参数,不会生效。- 最终生成可执行文件的链接阶段,命令行中缺少
-lpthread参数,链接器无法找到pthread相关符号的定义,因此触发DSO missing from command line报错。
解决方案
- 清理所有编译目标文件步骤中多余的链接类参数,删除
my_send.o、mem_manager.o编译命令里的-lrt、-lpthread。 - 将
-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
相关产品推荐
相关产品推荐

