对fdate_的未定义引用

时间:2016-10-14 19:27:25

标签: compilation fortran gfortran fortran77

安装名为snob的软件时,有一个文件`date.f'

function date(n)
 character*24 fdate,date
 external fdate
 date=fdate()
 return
end 

使用fort77进行编译时遇到了这样的错误:

fort77-4511-1.c:(.text+0x2f): undefined reference to `fdate_'
collect2: error: ld returned 1 exit status

我试过gfortran和g77都没有成功。我用fort77尝试了旗帜-fno-second-underscore,为了gfortran尝试了-fno-scoring但是仍然没有成功。

其他人建议我参考Compiling with gfortran: undefined reference to iargc_

首先,我将external替换为intrinsic并获取:

/usr/bin/f77  -c date.f
   date:
Error on line 17: Declaration error for fdate: unknown intrinsic      function
/usr/bin/f77: aborting compilation
make: *** [date.o] Error 25

然后我从fdate语句中删除了external并获取:

/usr/bin/f77  -c date.f
   date:
Error on line 17: syntax error
/usr/bin/f77: aborting compilation
make: *** [date.o] Error 25

有人会帮助我吗?

1 个答案:

答案 0 :(得分:1)

首先,如果fdate是编译器的非标准内在函数,则external语句是非法的,如Compiling with gfortran: undefined reference to iargc_

中所述

您声称删除该行并放置intrisic并没有帮助。在这种情况下,我假设您的编译器没有fdate()作为内部函数,但是您仍然应该告诉我们在您尝试编译时打印的确切内容。

在这种情况下,你只是运气不好。您必须在某处找到fdate()的代码,或者您必须更改代码,以便它不会调用fdate(),或者您必须自己实现fdate()

我无法在此为您实现fdate(),这对于此服务器上的答案来说太过分了。

最后的可能性是使用更好的编译器。抛弃过去一个世纪古老而漫长的过时fort77并使用本世纪的东西。例如,免费gfortrang95或购买一些商业编译器。这取决于你。

这是一个有效的例子:

print *, date(1)

contains

  function date(n)
   character*24 fdate,date
!    external fdate
   intrinsic fdate
   date=fdate()
   return
  end

end

编译并运行:

> gfortran fdate.f90 
> ./a.out 
 Fri Oct 21 10:12:25 2016

使用gfortran 4.8.3