2014-09-10 107 views
0

嗨,我試圖編譯由我認爲是F77(.for extension)的其他人編寫的Fortran代碼。我得到的錯誤是:體系結構x86_64的未定義符號:gfortran

Undefined symbols for architecture x86_64: 
    "_random_", referenced from: 
     _pms_ in ccx1qzWD.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

我沒有張貼的代碼,但現在我已經爲這個錯誤是什麼意思,即使這樣我就可以開始搜索解決方案的在線搜索,但無法找到任何有用的信息。我沒有以前的Fortran經驗!任何有關這個錯誤的意義的幫助真的很感激。我使用的是Mac和包含「隨機」是一個子程序的一部分,只有部分:

DOUBLE PRECISION RANDOM 

DO 1 J=1,M 
     w(J)=dw+REAL(J*2-1)*dw/2.0 
     W1=w(J)*w(J)*w(J)*w(J)*w(J) 
     Vel1=Vel*Vel*Vel*Vel*W1/w(J) 
     Vel1=-6844.0697/Vel1 
     Gw(J)=0.77898/W1*EXP(Vel1) 
     Phi(J)=RANDOM()*8.0*ATAN(1.0) 
1  CONTINUE 

我使用:gfortran SEASIM.FOR編譯

預先感謝任何建議!

+0

好吧,我加入基於m烏斯導致錯誤(隨機不進來其他地方) – user3306583 2014-09-10 15:44:37

回答

1

好吧,它絕對看起來像你沒有提供鏈接器的庫包含random的實現。你可以四處挖掘,找到這樣一個圖書館,修改你的聯繫,並看看如何去。但通過調用gfortran內部rand替換對random的調用會更容易,該調用從01之間的均勻分佈返回一個數字。所以我建議你這樣做。進一步的細節請查閱文檔。

更好的方法是使用現在的標準random_number,但這是一個子程序,需要對程序進行更多的修改。

我有一個嘮叨的懷疑,如果您只需要執行構建程序的一步就是在命令行執行gfortran SEASIM.FOR,那麼您可能會錯過鏈接到其他必要的庫,所以如果報告失敗,我不會感到驚訝。

此行

DOUBLE PRECISION RANDOM 

聲明RANDOMDOUBLE PRECISION的事情。它是一個函數返回一個值而不是一個變量持有一個值,由後來的使用RANDOM()明確。編譯器對執行例程的代碼的位置無動於衷,但鏈接器不是。

+0

我有點困惑這樣一行的興田源代碼的一部分: DOUBLE PRECISION隨機 這是試圖調用一個名爲RANDOM的舊庫?我不明白這條線的語法,並且它意味着(我瘋狂搜索,但找不到任何有用的東西) – user3306583 2014-09-11 11:29:30

相關問題