我正在 Fedora 20 x86_64 上使用 gfortran [GNU Fortran (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)] 编译一堆 Fortran 77 代码,这些代码引用了以下方式:
bin2D2nc.f:31: integer 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): undefined reference to `iargc_'
collect2: error: ld returned 1 exit status
make: ** [bin2D2nc] Erro 1
我不是这段代码的作者。据我所知,我在 makefile 中正确设置了库路径.
我发现“iargc”是一个与 GNU Fotran 77 向后兼容的例程,但我对它的理解并不深入。
有人可以提供一些建议来解决这个问题吗?
最佳答案
该问题与 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,但这在这里并不重要。
关于gcc - 使用gfortran编译: undefined reference to iargc_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003926/