【问题标题】:Compiling with gfortran: undefined reference to iargc_使用 gfortran 编译:对 iargc_ 的未定义引用
【发布时间】: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


【解决方案1】:

问题与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,但在这里应该无关紧要。

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2021-12-26
    • 2012-08-16
    • 2013-11-20
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多