看板 Programming 關於我們 聯絡資訊
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)
yingwen:我自己是用 ifort 直接compile兩個檔案 61.22.53.53 11/09 23:15
yingwen:沒用過make 所以.....不知道有沒有幫上忙 61.22.53.53 11/09 23:16
yingwen:ex. "ifort a.f b.f" 61.22.53.53 11/09 23:16
physicschild:謝謝囉!140.112.248.169 11/10 12:50