【发布时间】:2016-05-02 10:20:30
【问题描述】:
我在 Fedora 20 x86_64 上使用 gfortran [GNU Fortran (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)] 来编译一堆 Fortran 77 代码,这些代码在方式如下:
bin2D2nc.f:31: 整数 iargc,strlen1
bin2D2nc.f:32: 外部 iargc,strlen1
bin2D2nc.f:44: i=iargc()
当 make 脚本到达下面的编译命令时,
gfortran -O3 -ffixed-line-length-132 -fall-intrinsics -I/home/santiago/Install/netcdf_sam/include -o bin2D2nc -I./SRC ./SRC/bin2D2nc.f ./SRC/hbuf_lib.f ./SRC/cape.f ./SRC/cin.f -L/home/santiago/Install/netcdf_sam/lib -lnetcdf -L/usr/lib64 -lpthread
我收到这些消息:
bin2D2nc.f:(.text+0x14): undefined reference to `iargc_'
collect2: 错误:ld 返回 1 个退出状态
make: ** [bin2D2nc] 错误 1
我不是此代码的作者。据我所知,我在makefile 中正确设置了库路径。
我发现 'iaargc' 是与 GNU Fotran 77 向后兼容的例程,但我对它的理解并不深入。
有人可以提出一些建议来解决这个问题吗?
【问题讨论】:
-
始终使用标签fortran,并且只在需要区分的地方添加版本标签。
-
IARGC 不是外部函数。或者它可能是一个,但你没有提供它。它是内在的。您必须使用
INTRINSIC IARGC或从EXTERNAL语句中删除IARGC。这是 FORTRAN 66 的残余,而不是 77。我将在找到原始问题后将这个问题作为副本关闭。 -
@vladimir-f,感谢您宝贵的 cmets。我认为您可以留下这两个问题,因为它们并不完全相同。像我这样的初学者可能不会看到这些问题如此相似。
-
是的,我意识到了这一点,最后也在这里给出了答案。
标签: gcc fortran gfortran fortran77