在 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/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
时可能搞砸了,但我已经在这个问题上卡了几天了,所以任何帮助都会非常有用赞赏!
最后,我的解决方案似乎只是使用 gfortran
而不是 f77
。这涉及在模型(即所有 Makefile)中小心地将所有提及项切换为 f77
,并将它们替换为 gfortran
。
然后需要全新安装库,因为在 f77
中编译的库显然与 gfortran
不兼容。
最后,模型调用了一些没有 ./
的可执行文件,这导致模型失败。
不幸的是,我无法解释为什么 f77 会失败,但是 gfortran 比 f77/f2c 更容易设置并且工作得很好,所以它可能是要走的路。
我一直在尝试 运行 这个模型,几十年前别人写的。我已经构建了库,但是当我尝试实际 运行 程序时,出现以下错误:
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
时可能搞砸了,但我已经在这个问题上卡了几天了,所以任何帮助都会非常有用赞赏!
最后,我的解决方案似乎只是使用 gfortran
而不是 f77
。这涉及在模型(即所有 Makefile)中小心地将所有提及项切换为 f77
,并将它们替换为 gfortran
。
然后需要全新安装库,因为在 f77
中编译的库显然与 gfortran
不兼容。
最后,模型调用了一些没有 ./
的可执行文件,这导致模型失败。
不幸的是,我无法解释为什么 f77 会失败,但是 gfortran 比 f77/f2c 更容易设置并且工作得很好,所以它可能是要走的路。