【发布时间】:2016-05-15 23:37:20
【问题描述】:
我一直在尝试运行这个模型,它是几十年前由其他人编写的。我已经构建了库,但是当我尝试实际运行程序时,出现以下错误:
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 时可能搞砸了,但是我已经被这个问题困扰了几天,所以非常感谢任何帮助!
【问题讨论】:
-
如果您的源代码没有 PROGRAM 过程(在 f77 之前,没有 FUNCTION 或 SUBROUTINE 标题的过程),您将需要修复它。其次,使用 gfortran 应该比 20 年前的 f77 翻译器更容易使用。
-
@tim18:不完全确定您的评论第一部分是什么意思,但自述文件告诉我运行一个
runit文件。这就是给我这个错误的原因。我也切换到使用 gfortran,完全相同的错误。 -
@roygvib:我使用
gfortran上的信息编辑了问题。一个简单的hello world程序可以正常工作。运行您建议的行时,我收到一个关于一堆重复项的新错误类型,并以:ld: 19 duplicate symbols for architecture x86_64 collect2: error: ld returned 1 exit status... -
@roygvib:我已将所有对
f77的调用更改为gfortran,并在我的bash 配置文件中创建了一个别名。副本实际上是奇怪的文件:duplicate symbol _set_flag_ in: /var/folders/n0/0df9sk4934q632rhr5dqcv0h0000gn/T//ccHPHth6.o /var/folders/n0/0df9sk4934q632rhr5dqcv0h0000gn/T//cc0ZazUC.o它们不是我库的一部分,我只是全新安装了模型,同样的问题。 -
所以我认为它只是编译!关于副本的错误来自您建议的行,但运行实际的代码行似乎已经成功了:
gfortran -o mimics1.5 ../source/*.o trunk_hght_f.f。现在不幸的是,我实际上不确定是什么让它工作......我认为这是全新安装 + 仔细更改所有 f77 提及 + 在可执行文件前面添加一些./。我有点沮丧,因为我不完全确定它到底做了什么……
标签: linker fortran clang fortran77 binutils