在 OSX 10.11 上使用 f77 编译问题

Issue compiling with f77 on OSX 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 时可能搞砸了,但我已经在这个问题上卡了几天了,所以任何帮助都会非常有用赞赏!

最后,我的解决方案似乎只是使用 gfortran 而不是 f77。这涉及在模型(即所有 Makefile)中小心地将所有提及项切换为 f77,并将它们替换为 gfortran

然后需要全新安装库,因为在 f77 中编译的库显然与 gfortran 不兼容。

最后,模型调用了一些没有 ./ 的可执行文件,这导致模型失败。

不幸的是,我无法解释为什么 f77 会失败,但是 gfortran 比 f77/f2c 更容易设置并且工作得很好,所以它可能是要走的路。