作者takaoclass (高雄級)
看板Fortran
標題[問題] 副程式錯誤訊息求助
時間Wed Apr 25 19:13:18 2018
我寫了兩隻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://webptt.com/m.aspx?n=bbs/Fortran/M.1524654800.A.648.html
1F:→ remia81: call不用放C在裡面,那是回傳值 04/25 19:32
2F:推 PTT0207445: end應改為end program pr 04/26 17:41
3F:→ PTT0207445: end應改為end subroutine sy_sub 04/26 17:42
4F:→ PTT0207445: 上次我回文中的問題這次又重複出現,是否哪裡沒看懂嗎? 04/26 17:45
5F:推 PTT0207445: 我想我可能知道你的問題了,你有兩個.f檔,應該可以同時 04/26 21:36
6F:→ PTT0207445: 編譯,gortran my_sub.f pr.f。如果要分別編譯可以這樣 04/26 21:42
7F:→ PTT0207445: gfortran -c my_sub.f 這樣會產生一個my_sub.o檔,然後 04/26 21:43
8F:→ PTT0207445: gfortran my_sub.o pr.f 這樣編譯連結產生執行檔a.out 04/26 21:44
9F:→ PTT0207445: 你也可以不要分成兩個檔,直接把subroutine寫在pr.f裡, 04/26 21:46
10F:→ PTT0207445: 這樣只要gfortran pr.f就行了。但我還是建議你既然是 04/26 21:47
11F:→ PTT0207445: 從頭學起了,就不要再學77語法,直接從90開始,然後你需 04/26 21:52
12F:→ PTT0207445: 要至少一本書,中文書我推薦彭國倫的Fortran95程式設計 04/26 21:57
14F:→ PTT0207445: 英文書我推薦Fortran 95/2003 Explained 04/26 22:00
15F:→ PTT0207445: 作者:Michael Metcalf, John Reid, and Malcolm Cohen 04/26 22:02
16F:→ jubilee2: 樓上認真回!都可以開一篇回文了!讚! 05/07 11:21
17F:推 max533: 路過推彭國倫那本,蠻不錯的工具書 06/09 19:09
18F:→ martink: Cdzu 07/13 11:59