如何解决未定义的引用`iargc_'错误?

时间:2015-05-12 12:27:34

标签: linux ubuntu fortran gfortran

我正在尝试通过执行“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

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2 个答案:

答案 0 :(得分:2)

FWIW是我在Ubuntu 14.04 x86_64上从gribextract tarball构建hrldas-v3.4.1的方法。 免责声明:我不是Fortran程序员,事实上我通常只会在这些“遗留”应用程序中发现自己与之争吵

  1. 修改user_build_options以删除-C的{​​{1}}选项,并为cppjasper设置适当的包含和库路径(就我而言,标准位置)。 注意:只有在使用gfortran>时,才需要删除netcdf。 4.8.x

    -C
  2. 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。)

  3. 编辑external以解决有关将循环变量Utility_programs/modify_wrfinput.F作为i参数传递给nf90_def_dim函数的错误:{{1}正在

    intent(out)
  4. 构建顶级软件

    diff
  5. 构建/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
    
  6. 测试可执行文件

    Utility_programs

答案 1 :(得分:0)

我认为您需要将您的程序与gfortran库相关联。将-lgfortran添加到您的链接参数。

UPD :似乎iargc以不同的方式处理,具体取决于它在程序和程序编译选项中的使用方式。以下是两个有用的链接:https://gcc.gnu.org/ml/fortran/2007-01/msg00236.htmlhttps://gcc.gnu.org/bugzilla/show_bug.cgi?id=20248

一些总结:

  • 您不应在代码中加入extern iargc
  • 您不应该使用-std=f95(虽然您似乎没有使用它)

也许你需要玩一些可能的选项,我还没试过。