compiler:Intel(R) Fortran Compiler Options(10.1)
系统: linux
目前我写了三个程式,主程式为pro1.f90,其中要用到
subroutine a和subroutine b。而 pro2.f90就是subroutine a,
其中subroutine a 要用到subroutine b, pro3.f90 就
是subroutine b。接着我用makefile如下:
========================================================================
FC = ifort
OP = -O3
LIB = -L/opt/intel/mkl/8.1/lib/em64t -lmkl -lmkl_lapack -lguide -lpthread
a.out : pro1.f.f90 pro2.o pro3.o
$(FC) $(OP) -o a.out pro1.f90 pro2.o pro3.o $(LIB)
pro2.o : pro2.f
$(FC) $(OP) -c pro2.f90 $(LIB)
pro3.o : pro3.f
$(FC) $(OP) -c pro3.f90 $(LIB)
clean :
rm *.o
=======================================================================
make後执行./a.out 却发生以下错误:
=======================================================================
n= 100 particleN 1 L= 0 parL= 5
n= 100 L= 5 parL= 5
end of Pl(theta) !!到这里算是执行正确。
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
libifcore.so.5 0000002A959C45FC Unknown Unknown Unknown
libpthread.so.0 000000373870C4F0 Unknown Unknown Unknown
libifcore.so.5 0000002A959C45D5 Unknown Unknown Unknown
libpthread.so.0 000000373870C4F0 Unknown Unknown Unknown
========================================================================
可是奇怪的,我把pro2.f90的程式码直接贴到pro1.f90里面,接着执行:
ifort –O3 -L/opt/intel/mkl/8.1/lib/em64t -lmkl -lmkl_lapack -lguide –lpthread pro1.f90 pro3.o
接着执行产生的执行档,结果完全没有错误。
由上面应该可以确认我的程式码没有错误,但我有找不
出makefile这样写有什麽不对。又或者把主程式和subroutine
拆开成两个档案有什麽特别需要注意的吗?请各位高手给些意见吧。
谢谢!
※ 编辑: physicschild 来自: 140.112.101.161 (11/08 18:54)
1F:推 yingwen:我自己是用 ifort 直接compile两个档案 61.22.53.53 11/09 23:15
2F:→ yingwen:没用过make 所以.....不知道有没有帮上忙 61.22.53.53 11/09 23:16
3F:→ yingwen:ex. "ifort a.f b.f" 61.22.53.53 11/09 23:16
4F:→ physicschild:谢谢罗!140.112.248.169 11/10 12:50