2017-05-30 23 views
2

我有一堆Fortran77代碼,需要用於我的研究,但是我無法編譯它在我的MacBook上運行,所以我轉向了Julia。我對這門語言很陌生,但在我的生活中,我無法弄清楚如何直接在Julia中執行Fortran腳本。我只需要一個運行F77腳本的程序,並直接將控制權交給Fortran。我只是用Julia或Numpy重寫它,但是大約有10,000行代碼和不到200行評論,我沒有時間。用Julia編譯Fortran77

+2

在julia可以調用它之前需要編譯它。 使用'ccall'請參閱[docs](https://docs.julialang.org/en/stable/manual/calling-c-and-fortran-code/)爲fortran做ctrl + f以獲得fortran特性。 另請參閱:https://stackoverflow.com/questions/27498755/examples-of-integrating-fortran-code-in-julia 和https://stackoverflow.com/questions/28373693/calling-a-fortran-函數從julia返回一個數組未知函數段 –

+5

[集成Fortran代碼在Julia中的示例]的可能重複(https://stackoverflow.com/questions/27498755/examples-of-integrating-fortran -code-in-julia) –

+6

Fortran程序不是*腳本*它們需要編譯爲編譯器 –

回答

4

從你的問題的措辭看來,你似乎想用Julia直接調用Fortran「腳本」 - 大概是Fortran .f源文件 - 是否準確?如其他人在評論中指出的那樣,Fortran不是一種腳本語言:您不能直接執行Fortran源文件;相反,您必須使用Fortran編譯器(例如gfortran,ifort)將Fortran程序轉換爲要運行程序的系統的本機庫或可執行文件。由於Julia不是Fortran解釋器或編譯器,因此Julia對此無能爲力 - 它既不能直接運行Fortran代碼,也不能將Fortran源文件轉換爲可執行文件/庫。

但是,如果你已經有了一個Fortran共享庫編譯(在Windows .so文件在Linux上,.dylib在MacOS,.dll),你可以從朱莉婭方便地調用它,如Integrating Fortran code in Julia描述。如果您可以將Fortran源代碼編譯爲可執行文件(而不是共享庫),那麼您不需要其他任何東西來運行它 - 根據定義,可執行文件是獨立的。

編譯語言(如Fortran或C/C++)中的大多數項目都帶有Makefiles或其他機制來幫助調用編譯器來生成適當的二進制工件(可執行文件和/或庫)。

+0

謝謝,對於腳本這個詞的混淆感到抱歉。在物理學中,我們經常使用'腳本'和'程序',儘管我們不應該這樣做。 你是對的。我有一個Fortran77程序,它是'.f',我無法使用任何常用編譯器來編譯它。我嘗試gfortran無濟於事。從技術上講,我確實有可執行文件,但它們是針對在SunOS上運行的舊Sun工作站編譯的,而且我在Mac上編譯。 –

+1

對。這些可執行文件絕對不會在Mac上運行,而Julia無法幫助您編譯Fortran。您可以繼續嘗試弄清楚如何調用gfortran來編譯代碼或翻譯代碼。 10k LOC並不像看起來那麼多 - 特別是因爲從冗長的靜態語言到簡潔的動態類似Julia時,代碼縮減10倍並不罕見。無論哪種方式,祝你好運! – StefanKarpinski

+0

@BobCaddy:你介意接受這個答案,因爲它似乎解決了你的問題? – StefanKarpinski