2013-03-31 106 views
-1

我想編譯一些Fortran代碼,根據文檔,已知可用「Intel Fortran編譯器11」進行編譯。但是,當我嘗試使用用於OS X的英特爾®Fortran Composer XE 2013隨附的ifort版本(此處爲http://software.intel.com/en-us/fortran-compilers)編譯代碼時,出現一些錯誤。我懷疑我要麼1)使用與Fortran使用的確切方言不兼容的編譯器和/或2)未包含一些必要的庫。如何編譯未知方言的Fortran代碼和未知庫

我不是Fortran程序員,所以我希望有更多經驗的人能夠瀏覽一下代碼並認識它是否只是使用不同編譯器的簡單問題,設置一些編譯器選項,包括一些特定的圖書館,或者如果我完全錯過了其他的東西。

完整的源代碼可以直接在這裏以上的內容中找到:http://baydeltaoffice.water.ca.gov/modeling/deltamodeling/models/dsm2/dsm2.cfm

首先,我只是想編譯groups.f開始/ DSM2_v8_0_6_src/dsm2_v8_0/src目錄/通用(這需要一個很少有其他模塊會先編譯),但最終目標是編譯DSM2_v8_0_6_src/dsm2_v8_0/src/ptm/native/fixedData.f及其所有依賴項。

我使用的語法遵循這個基本的模式:

ifort -c DSM2_v8_0_6_src/dsm2_v8_0/src/common/groups.f 

爲了讓我遇到了錯誤類型的感覺,這裏有反覆發生的幾個類型:

groups.f(225): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: 
(*) :: , . % + - [ : . **/// .LT. < .LE. <= .EQ. == ... 
write(unit_error,*)"Error in matching text pattern:",trim(pattern) 
---------------------------------------------------------------------^ 

groups.f(265): error #5120: Unterminated character constant 
&  "Error in pattern matching. Implementation count does not equal count in NumberMatches" 
------^ 
+0

這兩個錯誤看起來像是行尾問題。檢查你的文件是否使用編譯器期望的EOL約定(很可能是DOS,但你永遠不會知道......) –

+0

你問過代碼提供者的幫助嗎? – eriktous

+0

謝謝,我會檢查EOL大會。我可能最終不得不向供應商尋求幫助,儘管如果可能的話我想自己弄清楚,以便更快地找到答案並更徹底地理解代碼。 –

回答

0

可能是F77或F90,具體取決於您如何完成格式化。 Stack oveflow fomatting需要4個空格來啓動代碼。在行225上,是縮進6還是不縮進。如果它縮進6並且265縮進5,那麼它是F77。

另一個問題是當從一臺機器移動到另一臺機器時,領先的空間是否被剝離。如果是這種情況,那麼他們需要重新插入。

在出現錯誤的第一行上,檢查行終止。所有行應以CR LF或LF結束。如果有混合,編譯器會拋出一個搖擺。

如果是F77,請嘗試將擴展名爲.f的文件重命名爲.for擴展名。 ifort一定會選擇他們作爲F77。

+0

謝謝,我會給這些建議一個鏡頭。 –

0

如果這可能有助於指出某人在正確的方向有類似問題,在做了一些挖掘之後,我可以確定代碼最初是使用Visual Studio和編譯器選項FixedFormLineLength =「fixedLength132」編譯的。因此,使用ifort從命令行,我可以編譯使用以下基本圖案(省略所有的包含路徑等,爲清楚起見):

ifort -c -132 DSM2_v8_0_6_src/dsm2_v8_0/src/common/groups.f 

至於方言,我後來從提供商聽到該代碼主要是用Fortran 77編寫的,其中一些部分後來修改爲Fortran 90.