如何在没有无法分类的语句和意外的文件结尾错误的情况下编译 .f 文件
How to compile .f file without unclassifiable statment and unexpected end of files errors
我是 Fortran 的新手,我需要它来加速我在 R 中的代码,我在 Arch 中使用 gfortran Linux:这是我的代码之一:
subroutine pkfull(m,n,o,a,b,ps,pk)
implicit none
integer,intent(in) :: m,n,o
integer :: i,j,k
double precision,intent(in) :: a(o)
double precision,intent(in) :: b(o)
double precision,intent(in) :: ps(m,n,o)
double precision,intent(inout) :: pk(m,n,o)
do 20,i=1,m
do 15, j =1,n
do 10, k=1,o
pk(i,j,k) = ps(i,j,k)*b(k)+a(k)
10 end do
15 end do
20 end do
end subroutine pkfull
我在 运行 之后得到的错误:$R CMD SHLIB pkfull.f
gfortran -fno-optimize-sibling-calls -fpic -g -O2 -c pkfull.f -o pkfull.o
pkfull.f:12:24:
12 | pk(i,j,k) = ps(i,j,k)
| 1
Error: Unclassifiable statement at (1)
pkfull.f:16:2:
16 | end subroutine pkfull
| 1
Error: Non-numeric character in statement label at (1)
f951: Error: Unexpected end of file in ‘pkfull.f’
make: *** [/usr/lib64/R/etc/Makeconf:190: pkfull.o] Error 1
我复制了你的代码并尝试编译。这可能只是每行开头的空格问题。确保所有行都从第 7 列开始,保留第一列用于注释,第 6 列用于任何延续标记,并将任何行号放在第 2 列之后。所以你的代码应该如下:
SUBROUTINE pkfull(m,n,o,a,b,ps,pk)
IMPLICIT NONE
INTEGER,INTENT(IN) :: m,n,o
integer :: i,j,k
double precision,intent(in) :: a(o)
double precision,intent(in) :: b(o)
double precision,intent(in) :: ps(m,n,o)
double precision,intent(inout) :: pk(m,n,o)
do 20,i=1,m
do 15, j =1,n
do 10, k=1,o
pk(i,j,k) = ps(i,j,k)*b(k)+a(k)
10 end do
15 end do
20 end do
end subroutine pkfull
我是 Fortran 的新手,我需要它来加速我在 R 中的代码,我在 Arch 中使用 gfortran Linux:这是我的代码之一:
subroutine pkfull(m,n,o,a,b,ps,pk)
implicit none
integer,intent(in) :: m,n,o
integer :: i,j,k
double precision,intent(in) :: a(o)
double precision,intent(in) :: b(o)
double precision,intent(in) :: ps(m,n,o)
double precision,intent(inout) :: pk(m,n,o)
do 20,i=1,m
do 15, j =1,n
do 10, k=1,o
pk(i,j,k) = ps(i,j,k)*b(k)+a(k)
10 end do
15 end do
20 end do
end subroutine pkfull
我在 运行 之后得到的错误:$R CMD SHLIB pkfull.f
gfortran -fno-optimize-sibling-calls -fpic -g -O2 -c pkfull.f -o pkfull.o
pkfull.f:12:24:
12 | pk(i,j,k) = ps(i,j,k)
| 1
Error: Unclassifiable statement at (1)
pkfull.f:16:2:
16 | end subroutine pkfull
| 1
Error: Non-numeric character in statement label at (1)
f951: Error: Unexpected end of file in ‘pkfull.f’
make: *** [/usr/lib64/R/etc/Makeconf:190: pkfull.o] Error 1
我复制了你的代码并尝试编译。这可能只是每行开头的空格问题。确保所有行都从第 7 列开始,保留第一列用于注释,第 6 列用于任何延续标记,并将任何行号放在第 2 列之后。所以你的代码应该如下:
SUBROUTINE pkfull(m,n,o,a,b,ps,pk)
IMPLICIT NONE
INTEGER,INTENT(IN) :: m,n,o
integer :: i,j,k
double precision,intent(in) :: a(o)
double precision,intent(in) :: b(o)
double precision,intent(in) :: ps(m,n,o)
double precision,intent(inout) :: pk(m,n,o)
do 20,i=1,m
do 15, j =1,n
do 10, k=1,o
pk(i,j,k) = ps(i,j,k)*b(k)+a(k)
10 end do
15 end do
20 end do
end subroutine pkfull