2016-10-14 74 views
0

當安裝一個叫勢利軟件,有一個文件`date.f」未定義參考fdate_

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_

首先,我換成externalintrinsic並獲得:

/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 

然後我刪除fdateexternal聲明,並得到:

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

威爾任何人都可以幫助我?

+0

我不知道爲什麼你應該有這個問題,這個遺留(不是Fortran 77)函數由gfortran支持https://gcc.gnu.org/onlinedocs/gfortran/FDATE.html(嘗試沒有關於un的任何選項derscores),但最好更改爲標準的date_and_time。 – tim18

+0

你爲什麼使用f77?你一定要嗎?如果沒有,請使用f90或2003標準 –

+0

您必須顯示代碼。會投票結束,但保存我的投票以後。我敢打賭,這是重複的。代碼中的任何地方是否有'external fdate'?如果是的話,那是重複的。 –

回答

1

首先,如果fdate是你的編譯器的非標準的固有功能,如Compiling with gfortran: undefined reference to iargc_

解釋你聲稱刪除線,並把intrisic反而沒有幫助external聲明是非法的。在這種情況下,我假定你的編譯器沒有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

+0

非常感謝您的耐心等待!我試過gfortran和g95,但沒有運氣。也許我應該從其他編譯器中尋找fdate(),並由我自己來解釋它。再次感謝您的熱心幫助! –

+0

你刪除了'external'嗎?你必須。編輯你的問題,並描述你嘗試的步驟,包括命令和錯誤消息。 –