共轭梯度方法 - 架构x86_64的未定义符号

时间:2014-11-25 00:25:17

标签: fortran

我今年开始使用fortran,所以我很抱歉,如果它是基本的,但我一直在寻找答案,我需要明天提交:(我一直得到错误:

Jamess-MacBook-Pro:Coursework2 james$ gfortran Question2cprogram.f90
gfortran: warning: couldn’t understand kern.osversion ‘14.0.0
Undefined symbols for architecture x86_64:
  "___cg_solver_MOD_cg", referenced from:
      _MAIN__ in ccg9ePxI.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

这是一个相对简单的程序,只是将值放入子程序" cg"从模块cg_solver调用。

program Question2c

use cg_solver
use numeric_kinds
use csr_sparse_matrix

implicit none

  real(dp) :: tol
  real(dp), dimension(:), allocatable :: x, b, real_x
  integer :: n, no_iterations
  type(sp_matrix) :: a

  n = 4

  allocate(real_x(n))
  real_x(1)=1
  real_x(2)=7
  real_x(3)=4
  real_x(4)=13

  allocate(b(n))
  b(1)=30.0
  b(2)=34.0
  b(3)=28.0
  b(4)=152.0

  allocate(x(n))

  allocate(a%matrix_entries(8))
  a%matrix_entries(1)=4.0
  a%matrix_entries(2)=2.0
  a%matrix_entries(3)=3.0
  a%matrix_entries(4)=1.0
  a%matrix_entries(5)=7.0
  a%matrix_entries(6)=2.0
  a%matrix_entries(7)=1.0
  a%matrix_entries(8)=11.0

  allocate(a%column_no(8))
  a%column_no(1)=1.0
  a%column_no(2)=4.0
  a%column_no(3)=2.0
  a%column_no(4)=4.0
  a%column_no(5)=3.0
  a%column_no(6)=1.0
  a%column_no(7)=2.0
  a%column_no(8)=4.0

  allocate(a%row_start(5))
  a%row_start(1)=1.0
  a%row_start(2)=3.0
  a%row_start(3)=5.0
  a%row_start(4)=6.0
  a%row_start(5)=9.0

  tol = 10**(-10)

  call cg(a,b,x,n,tol,no_iterations)

  print *, x

  deallocate(a)
  deallocate(x)
  deallocate(real_x)

end program Question2c

模块cg_solver来自讲师,工作正常。我认为这个错误可能与我调用模块或其他东西的方式有关但我无法看出错误;它们都在同一个文件夹中。

1 个答案:

答案 0 :(得分:0)

在OS X上使用gfortran时,为运行时指定'-arch x86_64'标志我有更好的运气。

可能会尝试使用该标志重新编译所有文件。