架构x86_64的未定义符号:gfortran

时间:2014-09-10 15:02:49

标签: fortran gfortran

嗨,所以我正在尝试编译由我认为是F77(.for扩展名)的其他人编写的Fortran代码。我得到的错误是:

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,唯一包含“random”的部分是子程序的一部分:

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编译

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

好的,看起来你肯定没有为链接器提供包含random实现的库。你可以挖掘并找到这样一个库,修改你的链接,看看它是怎么回事。但是通过调用random内在gfortran来替换rand的来电会更容易,后者会在0和{{1}之间的统一分布中返回一个数字}。这就是我建议你做的。有关详细信息,请参阅文档。

更好的方法是使用现在标准的1,但这是一个子程序,需要对程序进行更多修改。

我有一种唠叨的怀疑,如果你构建程序的唯一步骤是在命令行执行random_number那么你可能会错过链接到其他必要的库,所以我不会感到惊讶,如果你报告失败。

这一行

gfortran SEASIM.FOR

声明DOUBLE PRECISION RANDOM RANDOM件事。它是一个返回值而不是保存值的变量的函数,后来使用DOUBLE PRECISION就清楚了。编译器对实现例程的代码的位置无动于衷,但链接器不是。