首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Fortran中读取文件中的列时,g++会给出`未定义的符号:"__gfortran_set_args"`

在Fortran中读取文件中的列时,g++会给出`未定义的符号:"__gfortran_set_args"`
EN

Stack Overflow用户
提问于 2017-08-10 22:30:30
回答 1查看 218关注 0票数 1

我正在尝试从Fortran的输入文件中读取列,以便将它们用于其他计算。

当我使用g ++编译时,我读到了这个错误:

代码语言:javascript
复制
 Undefined symbols for architecture x86_64:
  "__gfortran_set_args", referenced from:
      _main in ccOO2MBV.o
  "__gfortran_set_options", referenced from:
      _main in ccOO2MBV.o
  "__gfortran_st_close", referenced from:
      _MAIN__ in ccOO2MBV.o
  "__gfortran_st_open", referenced from:
      _MAIN__ in ccOO2MBV.o
  "__gfortran_st_read", referenced from:
      _MAIN__ in ccOO2MBV.o
  "__gfortran_st_read_done", referenced from:
      _MAIN__ in ccOO2MBV.o
  "__gfortran_transfer_real", referenced from:
      _MAIN__ in ccOO2MBV.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

我哪里错了?代码是这样的:

代码语言:javascript
复制
program columns

  INTEGER,SAVE :: lun
  INTEGER, PARAMETER :: ARRAYLEN=1440
  CHARACTER :: filename
  DOUBLE PRECISION, DIMENSION (1044) :: X_halo, Y_halo, Z_halo
  INTEGER :: i

  lun=1
  filename = 'xyz.dat'

  OPEN (1, FILE='xyz.dat',STATUS='old', ACTION='read', iostat=istat)

    do i=1,1440
       READ (1, iostat=istat) X_halo(i), Y_halo(i), Z_halo(i)
    end do

  CLOSE (1)

end program columns
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 23:17:41

正如@d_1999所指出的,编译器应该是gfortran,而不是g++

除此之外,将@Ross的注释更改为答案,您的代码应该以指定的READ格式运行,此处如下所示

代码语言:javascript
复制
READ (1, *, iostat=istat) X_halo(i), Y_halo(i), Z_halo(i)

提供运行代码所需的最小更改。除此之外,还可以看看这里实现的其他差异:

代码语言:javascript
复制
program columns
  ! Add implicit none to catch that `istat` is not declared
  IMPLICIT NONE

  INTEGER,SAVE :: lun
  INTEGER, PARAMETER :: ARRAYLEN=1440
  ! Make `filename` bigger than a single character
  CHARACTER(120) :: filename
  ! can add `ARRAYLEN` here
  DOUBLE PRECISION, DIMENSION (ARRAYLEN) :: X_halo, Y_halo, Z_halo
  ! Have added `istat` here
  INTEGER :: i, istat

  lun=1
  filename = 'xyz.dat'
  ! Have replaced `xyz.dat` with `filename` and using a higher `UNIT` number
  OPEN (UNIT=10, FILE=filename, STATUS='old', ACTION='read', IOSTAT=istat)

    ! Using `ARRAYLEN` for the loop.
    ! I've also capitalised the keywords (matter of preference)
    DO i=1,ARRAYLEN
       ! And the important format specifier
       READ (10, *, iostat=istat) X_halo(i), Y_halo(i), Z_halo(i)
    END DO

  CLOSE (10)

end program columns

其中一些问题(例如,filename不够大)可以通过使用-Wall标志进行编译来捕获,例如

代码语言:javascript
复制
gfortran -Wall columns.f90 -o columns.exe
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45616561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档