2014-09-10 112 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

相关问题