安装名为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
有人会帮助我吗?
答案 0 :(得分:1)
首先,如果fdate
是编译器的非标准内在函数,则external
语句是非法的,如Compiling with gfortran: undefined reference to iargc_
您声称删除该行并放置intrisic
并没有帮助。在这种情况下,我假设您的编译器没有fdate()
作为内部函数,但是您仍然应该告诉我们在您尝试编译时打印的确切内容。
在这种情况下,你只是运气不好。您必须在某处找到fdate()
的代码,或者您必须更改代码,以便它不会调用fdate()
,或者您必须自己实现fdate()
。
我无法在此为您实现fdate()
,这对于此服务器上的答案来说太过分了。
最后的可能性是使用更好的编译器。抛弃过去一个世纪古老而漫长的过时fort77
并使用本世纪的东西。例如,免费gfortran
或g95
或购买一些商业编译器。这取决于你。
这是一个有效的例子:
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