2016-05-15 60 views
0

我一直在試圖運行這個模型,這是幾十年前由其他人編寫的模型。我已經建立了圖書館,但是當我嘗試實際運行程序,我得到以下錯誤:在OSX上使用f77編譯問題10.11

f77 -o mimics1.5 ../source/*.o trunk_hght_f.f 
    trunk_hght_f.f: 
     trunk_hght_func: 
    Undefined symbols for architecture x86_64: 
     "MAIN__", referenced from: 
     -u command line option 
     (maybe you meant: _MAIN__) 
    ld: symbol(s) not found for architecture x86_64 
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我MacOSX上10.11,並which f77/usr/local/bin/f77f77 -v還給:

Cynthias-MacBook-Pro-2:input_dir cynthiag$ f77 -v  
/usr/local/bin/f77 script based on f2c: 
    f2c (Fortran to C Translator) version 20100827. 

f77應該在/usr/bin/而不是?

ld似乎是這個問題,所以我按照HERE的指示試圖解決它,但它看起來像我的XCode是最新的,我的庫建立和鏈接(據我所知),我甚至重新安裝了binutils以確保ld在正確的位置,但沒有成功。 which ld得到:/usr/bin/ldld -v給出:

Cynthias-MacBook-Pro-2:input_dir cynthiag$ ld -v 
@(#)PROGRAM:ld PROJECT:ld64-264.3.102 
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS) 
LTO support using: LLVM version 7.3.0 

我是新來fortran,因此,在設置f77的時候我可能搞砸了,但我一直停留在這個問題上,現在幾天,所以任何幫助將不勝感激!

+0

如果您的源代碼沒有PROGRAM程序(在f77之前,沒有FUNCTION或SUBROUTINE標題的程序),您需要修復該程序。接下來,應該更容易使用gfortran,而不是20年前的f77翻譯器。 – tim18

+0

@ tim18:不完全確定你的評論的第一部分是什麼意思,但有自述文件告訴我運行的'runit'文件。這就是給我這個錯誤。我也轉向使用gfortran,完全相同的錯誤。 –

+0

@roygvib:我用'gfortran'上的信息編輯了這個問題。一個簡單的'hello world'程序工作正常。當運行你建議的線路時,我得到一個關於一堆重複項的新錯誤類型,結束於:'ld:體系結構x86_64的19個重複符號 collect2:錯誤:ld返回1退出狀態... –

回答

0

最後,對我來說,解決方案似乎只是使用gfortran而不是f77。這涉及在模型中(即在所有Makefiles中)仔細地將所有提及切換爲f77並且將其替換爲gfortran

然後,需要乾淨安裝的庫,因爲在f77編譯的庫顯然不會與gfortran兼容。

最後,該模型正在調用一些可執行文件,但沒有引起模型失敗的./

不幸的是,我不能解釋爲什麼f77失敗了,但gfortran比f77/f2c設置起來容易很多,而且效果很好,所以這可能是一條可行的路。