我正在尝试通过执行“make”命令来执行名为“gribextract”的程序。
我收到错误
gfortran -o hrldas_extract_point -fconvert=big-endian -g -I. \
hrldas_extract_point.o arguments_module.o module_date_utilities.o
llxy_generic.o lccone.o \
-L/home/Admin/Workstation/NETCDF413/lib -lnetcdff -lnetcdf
arguments_module.o: In function `initialize':
/home/Admin/Workstation/Hrldas/Utility_programs/arguments_module.f90:400: undefined reference to `iargc_'
collect2: error: ld returned 1 exit status
make: *** [hrldas_extract_point] Error 1
如何解决此错误。以下是我的用户构建选项
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
COMPILERF90 = gfortran
FREESOURCE = -ffree-form -ffree-line-length-none -cpp
F90FLAGS = -fconvert=big-endian -g
MODFLAG = -I
LDFLAGS =
CPP = cpp
CPPFLAGS = -C -P -traditional -D_GFORTRAN_ # -D_HRLDAS_URBAN_
LIBS =
LIBJASPER = -ljpeg -L/home/Admin/Workstation/Hrldas/Jasper/lib -ljasper
INCJASPER = -I/home/Admin/Workstation/Hrldas/Jasper/include
NETCDFMOD = -I/home/Admin/Workstation/NETCDF413/include
NETCDFLIB = -L/home/Admin/Workstation/NETCDF413/lib -lnetcdff -lnetcdf
HDF5LIB = -L/home/Admin/Workstation/HDF5-Ver-1.8.14/lib -lhdf5_hl -lhdf5 -lm -lcurl
NETCDF4_COMPRESS= YES
BZIP2 = YES
BZIP2_LIB = -lbz2
BZIP2_INCLUDE = -I/usr/include
RM = rm -f
CC = cc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
答案 0 :(得分:2)
FWIW是我在Ubuntu 14.04 x86_64上从gribextract
tarball构建hrldas-v3.4.1
的方法。 免责声明:我不是Fortran程序员,事实上我通常只会在这些“遗留”应用程序中发现自己与之争吵。
修改user_build_options
以删除-C
的{{1}}选项,并为cpp
和jasper
设置适当的包含和库路径(就我而言,标准位置)。 注意:只有在使用gfortran>时,才需要删除netcdf
。 4.8.x
-C
将COMPILERF90 = gfortran
FREESOURCE = -ffree-form -ffree-line-length-none
F90FLAGS = -fconvert=big-endian # -g
MODFLAG = -I
LDFLAGS =
CPP = cpp
CPPFLAGS = -P -traditional -D_GFORTRAN_ # -D_HRLDAS_URBAN_
LIBS =
LIBJASPER = -ljpeg -ljasper
INCJASPER = -I/usr/include
NETCDFMOD = -I/usr/include
NETCDFLIB = -L/usr/lib -lnetcdff -lnetcdf
HDF5LIB = -L/usr/lib -lhdf5_hl -lhdf5 -lm -lcurl
NETCDF4_COMPRESS = YES
BZIP2 = YES
BZIP2_LIB = -lbz2
BZIP2_INCLUDE = -I/usr/include
RM = rm -f
CC = cc
的所有external
声明转换为iargc
intrinsic
(find . -name '*.F' -execdir sed -i 's/external :: iargc/intrinsic :: iargc/' {} \;
关键字可能是多余的 - 我没有尝试删除intrinsic
。)
编辑external
以解决有关将循环变量Utility_programs/modify_wrfinput.F
作为i
参数传递给nf90_def_dim
函数的错误:{{1}正在
intent(out)
构建顶级软件
diff
构建/hrldas-v3.4.1$ diff Utility_programs/modify_wrfinput.F{.bak,}
387c387
< integer :: iret, i, j
---
> integer :: iret, i, j, iout
410c410,411
< iret = nf90_def_dim (copy_ncid, trim(name), lendd, i)
---
> iout = i
> iret = nf90_def_dim (copy_ncid, trim(name), lendd, iout)
软件
/hrldas-v3.4.1$ make
测试可执行文件
Utility_programs
答案 1 :(得分:0)
我认为您需要将您的程序与gfortran
库相关联。将-lgfortran
添加到您的链接参数。
UPD :似乎iargc
以不同的方式处理,具体取决于它在程序和程序编译选项中的使用方式。以下是两个有用的链接:https://gcc.gnu.org/ml/fortran/2007-01/msg00236.html和https://gcc.gnu.org/bugzilla/show_bug.cgi?id=20248
一些总结:
extern iargc
-std=f95
(虽然您似乎没有使用它)也许你需要玩一些可能的选项,我还没试过。