使用gfortran进行编译:对iargc_的未定义引用

时间:2016-01-25 22:46:42

标签: gcc fortran gfortran fortran77

我在Fedora 20 x86_64上使用gfortran [GNU Fortran(GCC)4.8.3 20140911(Red Hat 4.8.3-7)]来编译一堆Fortran 77代码,这些代码指的是' iargc'以下列方式运作:

  

bin2D2nc.f:31:整数iargc,strlen1

     

bin2D2nc.f:32:external 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):未定义引用`iargc _'

     

collect2:错误:ld返回1退出状态

     

制作:** [bin2D2nc] Erro 1

我不是此代码的作者。据我所知,我在makefile

中正确设置了库路径

我发现' iargc'是与GNU Fotran 77向后兼容的例程,但我不太了解它。

有人可以提出一些建议来超越这个问题吗?

1 个答案:

答案 0 :(得分:5)

问题与Fixing FORTRAN IV warning: "The number of arguments is incompatible with intrinsinc procedure, assume 'external' "非常相似,但不同之处在于,在另一个问题中存在一个外部函数,与内在函数的相似性是无意的,但是你故意称之为内在函数。

声明

EXTERNAL IARGC

意味着IARGC是FORTRAN 66中的外部或内在函数,但现代Fortran" 77及以后它意味着它只是一个外部函数。

但是你需要调用内在函数https://gcc.gnu.org/onlinedocs/gfortran/IARGC.html

你应该使用

 INTRINSIC IARGC

甚至只是从EXTERNAL语句删除IARGC而不添加任何其他内容。然后,编译器将停止搜索不存在的外部函数,并将使用内在函数。

最后一点,IARGC本身并不是标准的Fortran,在这里不应该这么重要。