我一直试图运行这个模型,几十年前被其他人写的。我已经构建了库,但是当我尝试实际运行该程序时,我收到以下错误:
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/f77
和f77 -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/ld
和ld -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 :(得分:0)
最后,对我来说似乎只是使用gfortran
代替f77
。这包括小心地将所有提及切换到模型中的f77
(即在所有Makefile中)并用gfortran
替换它们。
然后必须彻底安装库,因为显然在f77
中编译的库与gfortran
不兼容。
最后,该模型调用了一些没有./
的可执行文件,导致模型失败。
不幸的是,我不能解释为什么f77会失败,但是gfortran设置比f77 / f2c容易得多并且工作得很好,所以它可能是要走的路。