体系结构x86_64的未定义符号:gfortran
嗨,我试图编译由我认为是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编译
预先感谢任何建议!
好吧,它绝对看起来像你没有提供链接器的库包含random
的实现。你可以四处挖掘,找到这样一个图书馆,修改你的联系,并看看如何去。但通过调用gfortran
内部rand
替换对random
的调用会更容易,该调用从0
和1
之间的均匀分布返回一个数字。所以我建议你这样做。进一步的细节请查阅文档。
更好的方法是使用现在的标准random_number
,但这是一个子程序,需要对程序进行更多的修改。
我有一个唠叨的怀疑,如果您只需要执行构建程序的一步就是在命令行执行gfortran SEASIM.FOR
,那么您可能会错过链接到其他必要的库,所以如果报告失败,我不会感到惊讶。
此行
DOUBLE PRECISION RANDOM
声明RANDOM
是DOUBLE PRECISION
的事情。它是一个函数返回一个值而不是一个变量持有一个值,由后来的使用RANDOM()
明确。编译器对执行例程的代码的位置无动于衷,但链接器不是。
我有点困惑这样一行的兴田源代码的一部分: DOUBLE PRECISION随机 这是试图调用一个名为RANDOM的旧库?我不明白这条线的语法,并且它意味着(我疯狂搜索,但找不到任何有用的东西) – user3306583 2014-09-11 11:29:30
好吧,我加入基于m乌斯导致错误(随机不进来其他地方) – user3306583 2014-09-10 15:44:37