看板 Fortran 關於我們 聯絡資訊
我寫了兩隻f檔,分別是主程式、副程式,語法應該沒有錯誤,卻在編譯時跳出錯誤訊息。 程式碼如下: 主程式: PROGRAM pr REAL AA,BB,CC AA = 9.0 BB = 5.0 CALL MY_SUB(AA,BB,CC) END 副程式: SUBROUTINE MY_SUB(A,B,C) REAL A,B,C C = A + B WRITE(*,*) C RETURN END 編譯時卻分別跳出以下錯誤訊息: /tmp/ccbidGKt.o: In function `MAIN__': pr.f:(.text+0x32): undefined reference to `sub_' collect2:error :ld returned 1 exit status /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../lib64/crtl.o: In function `_start': (.text+0x20): undefined reference to `main' collect2:error :ld returned 1 exit status 請問這是怎麼回事? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.116.164.57 ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1524654800.A.648.html
remia81: call不用放C在裡面,那是回傳值 04/25 19:32
PTT0207445: end應改為end program pr 04/26 17:41
PTT0207445: end應改為end subroutine sy_sub 04/26 17:42
PTT0207445: 上次我回文中的問題這次又重複出現,是否哪裡沒看懂嗎? 04/26 17:45
PTT0207445: 我想我可能知道你的問題了,你有兩個.f檔,應該可以同時 04/26 21:36
PTT0207445: 編譯,gortran my_sub.f pr.f。如果要分別編譯可以這樣 04/26 21:42
PTT0207445: gfortran -c my_sub.f 這樣會產生一個my_sub.o檔,然後 04/26 21:43
PTT0207445: gfortran my_sub.o pr.f 這樣編譯連結產生執行檔a.out 04/26 21:44
PTT0207445: 你也可以不要分成兩個檔,直接把subroutine寫在pr.f裡, 04/26 21:46
PTT0207445: 這樣只要gfortran pr.f就行了。但我還是建議你既然是 04/26 21:47
PTT0207445: 從頭學起了,就不要再學77語法,直接從90開始,然後你需 04/26 21:52
PTT0207445: 要至少一本書,中文書我推薦彭國倫的Fortran95程式設計 04/26 21:57
PTT0207445: 英文書我推薦Fortran 95/2003 Explained 04/26 22:00
PTT0207445: 作者:Michael Metcalf, John Reid, and Malcolm Cohen 04/26 22:02
jubilee2: 樓上認真回!都可以開一篇回文了!讚! 05/07 11:21
max533: 路過推彭國倫那本,蠻不錯的工具書 06/09 19:09
martink: Cdzu 07/13 11:59