调用 BLAS 函数
Calling BLAS functions
这是一个简单的程序
PROGRAM MAIN
implicit none
integer, PARAMETER :: N=10
real*8 :: A(N)
real*8 :: x=0.1D0
integer :: i=1
Do i=1,N
A(i)=i
end do
call dscal(N,x, A, 1)
x=dasum(N,A,1)
END PROGRAM MAIN
我用命令编译
gfortran test.f90 -o test -O1 -I /usr/include/ -L /usr/lib -lblas
虽然调用子例程没有问题 dscal
但函数 dasum
出现以下错误
test.f90:15.2:
x=dasum(N,A,1)
1
Error: Function 'dasum' at (1) has no IMPLICIT type
我应该包含某个文件来定义 BLAS 函数吗?
对于函数,您需要手动指定 return 值(如果您觉得豪华,可以选择 external
):
real*8,external :: dasum
此外,请不要使用real*8
。它不符合标准,不可移植且相当混乱。而是使用 kind
参数来定义精度,例如:
real(kind=kind(1.d0))
之类的。如果可以使用 ISO_Fortran_env module
,请使用其常量 REAL32
和 REAL64
。
这是一个简单的程序
PROGRAM MAIN
implicit none
integer, PARAMETER :: N=10
real*8 :: A(N)
real*8 :: x=0.1D0
integer :: i=1
Do i=1,N
A(i)=i
end do
call dscal(N,x, A, 1)
x=dasum(N,A,1)
END PROGRAM MAIN
我用命令编译
gfortran test.f90 -o test -O1 -I /usr/include/ -L /usr/lib -lblas
虽然调用子例程没有问题 dscal
但函数 dasum
test.f90:15.2: x=dasum(N,A,1) 1 Error: Function 'dasum' at (1) has no IMPLICIT type
我应该包含某个文件来定义 BLAS 函数吗?
对于函数,您需要手动指定 return 值(如果您觉得豪华,可以选择 external
):
real*8,external :: dasum
此外,请不要使用real*8
。它不符合标准,不可移植且相当混乱。而是使用 kind
参数来定义精度,例如:
real(kind=kind(1.d0))
之类的。如果可以使用 ISO_Fortran_env module
,请使用其常量 REAL32
和 REAL64
。