【发布时间】:2021-09-17 15:10:54
【问题描述】:
我正在尝试运行一个使用 pthread 的 MPI 程序。我可以在我的本地机器上编译和运行,但不能在服务器上这样做。
这是我用来编译的命令。
target1: TARGET=main
target2: TARGET=kmer_finaliser
CC = mpic++
# CPPFLAGS = -pg
# CPPFLAGS = -lm -g -Wall -pthread
CPPFLAGS = -std=c++11 -pthread
USER_LIBS = -I /home/ruchin/sparsehash-sparsehash-2.0.4/src
main: main.o extractor.o com.o kmer_dump.o thread_pool.o
$(CC) $(CPPFLAGS) -o kmer_counter.out main.o extractor.o com.o kmer_dump.o thread_pool.o $(USER_LIBS)
main.o: main.cpp extractor.h com.h kmer_dump.h thread_pool.h
$(CC) $(CPPFLAGS) -c main.cpp $(USER_LIBS)
kmer_finaliser: kmer_finaliser.o kmer_dump.o
$(CC) $(CPPFLAGS) -o kmer_finaliser.out kmer_finaliser.o kmer_dump.o $(USER_LIBS)
kmer_finaliser.o: kmer_finaliser.cpp kmer_dump.h
$(CC) $(CPPFLAGS) -c kmer_finaliser.cpp $(USER_LIBS)
extractor.o: extractor.cpp extractor.h
$(CC) $(CPPFLAGS) -c extractor.cpp $(USER_LIBS)
com.o: com.cpp com.h
$(CC) $(CPPFLAGS) -c com.cpp $(USER_LIBS)
kmer_dump.o: kmer_dump.cpp kmer_dump.h
$(CC) $(CPPFLAGS) -c kmer_dump.cpp $(USER_LIBS)
thread_pool.o: thread_pool.cpp kmer_dump.h
$(CC) $(CPPFLAGS) -c thread_pool.cpp $(USER_LIBS)
这是我得到的错误。
/usr/bin/ld: thread_pool.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
【问题讨论】:
-
请发布完整的命令行
-
这是我使用的make文件,这里我也使用了-lpthread标志。没用。也喜欢@francesco 建议添加 -fopenmp 标志。也没有用
-
您是否删除了所有目标文件并使用
-pthread再次运行make? -
标志有点混乱。
CPPFLAGS和USER_LIBS仅用于源文件。要链接可执行主文件,您需要链接器标志,例如LDFLAGS="-lpthread"。那么 main 和 kmer_finalizer 的配方应该类似于$(CC) -o outfile obj.o obj2.o ... $(LDFLAGS) -
好的,谢谢您的信息。
标签: c++ compilation pthreads mpi