对符号“pthread_mutexattr_setpshared@@GLIBC_2.2.5”的未定义引用

undefined reference to symbol 'pthread_mutexattr_setpshared@@GLIBC_2.2.5'

提问人:hly19 提问时间:10/5/2021 最后编辑:hly19 更新时间:10/5/2021 访问量:640

问:

我试图添加-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)

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 -lrt 
mem_manager.o: mem_manager.cpp
    $(MP_MPI_CC)  -c -I.. mem_manager.cpp -o mem_manager.o -lrt -lpthread

这是错误信息

mpicc   mpbench.o flushall.o timer.o my_send.o mem_manager.o -o mpi_bench  -lrt
/usr/bin/ld: mem_manager.o: undefined reference to symbol 'pthread_mutexattr_setpshared@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

谁能帮我?非常感谢

C++ C Boost MPI 未定义引用

评论

2赞 Refugnic Eternium 10/5/2021
问题是,“对象”文件根本没有链接,应用程序是链接的。您需要将 and 指令添加到步骤中,将目标文件组装到应用程序中。-lrt-lpthread
1赞 Some programmer dude 10/5/2021
您尝试在命令行的哪个位置添加?并且仅在将 spource 文件编译为目标文件时,或者将目标文件链接到可执行文件时?-pthread
0赞 n. m. could be an AI 10/5/2021
切勿使用 -lpthread。在编译和链接时,请改用 -pthread。
0赞 hly19 10/5/2021
谢谢大家,在我将-lpthread添加到对象链接的位置后,问题得到了解决
0赞 Gilles Gouaillardet 10/5/2021
-pthread适用于 GNU 编译器,但不可移植(例如,PGI 编译器不支持它)。永远不要说永远;-)

答: 暂无答案