r - 如何编译 .f 文件而不会出现无法分类的语句和意外的文件结尾错误
问题描述
我是 Fortran 新手,我需要它来加速我在 R 中的代码,我在 Arch Linux 中使用 gfortran:这是我的代码之一:
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
推荐阅读
- excel - 如何在excel中合并两列中的数据以形成具有合并数据的新列
- android-studio - 为什么我们一般不在 kotlin 中使用私有变量?就像在 java c++ 等
- python - groupby 和滚动窗口的问题
- c# - POST 请求在 C# 中返回 404,但在 Postman 中不返回
- ios - 如何从复杂的崩溃日志中找到崩溃的原因
- javascript - 定时器从输入的值开始
- r - 安装包时权限被拒绝
- javascript - 使用 npm timepicker Laravel 5.8 的正确方法
- leaflet - 按属性过滤特征,这是 Mapbox 中的对象列表
- json - 使用 jmeter 将 JSON 转换为 XML