这是我的makefile
FC=gfortran
CC=gcc
CPC=g++
FFLAGS = -O3
LINK=g++
BLASF=dgemmf.o dgemmkernel2.o mult.o
BLASFSRC=dgemmf.f
TIMER=mytimer.o
TGEMM=tgemm
ALL= $(TGEMM)
LIBS = -lblas
all: $(ALL)
mult.o:
$(CPC) -O3 -fopenmp -c mult.cpp
$(TGEMM): tgemm.o mult.o $(TIMER) $(BLASF)
$(FC) $(FFLAGS) -o $(TGEMM) tgemm.o $(TIMER) $(BLASF) $(LIBS)
dgemmkernel2.o: dgemmkernel2.cpp
$(CPC) -O3 -c -fopenmp dgemmkernel2.cpp
tgemm.o: tgemm.f $(INCLUDE)
$(FC) $(FFLAGS) -c tgemm.f
clean:
rm -rf *.o $(ALL)
这是我得到的错误:
make -f makefile_gcc2
gfortran -O3 -c tgemm.f
g++ -O3 -fopenmp -c mult.cpp
gcc -c -o mytimer.o mytimer.c
gfortran -O3 -c -o dgemmf.o dgemmf.f
g++ -O3 -c -fopenmp dgemmkernel2.cpp
gfortran -O3 -o tgemm tgemm.o mytimer.o dgemmf.o dgemmkernel2.o mult.o -lblas
dgemmkernel2.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
mult.o: In function `global constructors keyed to main':
mult.cpp:(.text+0x1a): undefined reference to `std::ios_base::Init::Init()'
mult.cpp:(.text+0x29): undefined reference to `std::ios_base::Init::~Init()'
mult.o: In function `_Z4multPdS_iS_iii.omp_fn.0':
mult.cpp:(.text+0x4f): undefined reference to `omp_get_num_threads'
mult.cpp:(.text+0x57): undefined reference to `omp_get_thread_num'
mult.o: In function `mult(double*, double*, int, double*, int, int, int)':
mult.cpp:(.text+0x175): undefined reference to `omp_get_num_threads'
mult.cpp:(.text+0x1b9): undefined reference to `GOMP_parallel_start'
mult.cpp:(.text+0x1c6): undefined reference to `GOMP_parallel_end'
mult.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
make: *** [tgemm] Error 1
我从研究中了解到这些可能是链接器问题,但我不能为我的生活找出问题所在。那里有谁可能对这个问题有什么了解?
答案 0 :(得分:3)
如果您使用C ++源代码,则应该使用g ++程序而不是gfortran进行链接。英特尔编译器的情况恰恰相反。
所以改变:
$(TGEMM): tgemm.o mult.o $(TIMER) $(BLASF)
$(FC) $(FFLAGS) -o $(TGEMM) tgemm.o $(TIMER) $(BLASF) $(LIBS)
到
$(TGEMM): tgemm.o mult.o $(TIMER) $(BLASF)
$(LINK) $(FFLAGS) -o $(TGEMM) tgemm.o $(TIMER) $(BLASF) $(LIBS)
答案 1 :(得分:1)
我遇到了类似的问题,我通过链接'libgomp.dll.a'文件解决了这个问题 - 我使用的是MinGW 4.4。 或者你只需要添加到libirary以链接“-lgomp”,例如LIBS + = -lgomp