我在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向后兼容的例程,但我不太了解它。
有人可以提出一些建议来超越这个问题吗?
答案 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,在这里不应该这么重要。