f2py和gfortran的编译错误:对“ main”的未定义引用

Son*_*jee 5 python fortran gfortran f2py python-2.7

我最近开始使用f2py和python2.7在Fortran中处理与海洋模型(ROMS)相关的一些代码。我的工作站详细信息是具有python2.7,anaconda2和gfortran的Ubuntu 16.04。我也安装了netcdf和hdf5库。

makefile中的指令如下(一行):

$(F2PY)--fcompiler = gfortran --f90flags = $(F2PY_F90_FLAG)$(F2PY_LIB)$(F2PY_INCLUDE)$(OBJF2PY)-m -c scrip pyscrip.f90

哪里:

  • F2PY链接到/ bin目录中的f2py编译器。
  • OBJF2PY是使用f2py编译的目标文件集(目录中包含所有相关的源文件)。
  • F2PY_INCLUDE是包含路径(包含netcdf.inc和netcdf.mod)
  • -L $ {LIBDIR} -lnetcdf -lnetcdff -lhdf5 -lhdf5_hl-是库路径,链接到netcdf和hdf5库文件。
  • F2PY_F90_FLAG ='-g -fdefault-real-8 -ffixed-form -O2 -fPIC -m64 -shared'-链接到f2py的编译器标志。

在编译期间,出现如下错误:

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function _start: (.text+0x20): undefined reference to 'main' collect2: error: ld returned 1 exit status

我不明白为什么会出现此错误。指令的顺序正确吗?它与编译器标志有关吗?代码是否需要其他任何包含文件(netcdf.inc除外)或任何其他库(netcdf和hdf5库除外)?

3le*_*gos 0

GitHub上给出了答案,并将该-shared选项添加到您的LDFLAGS环境变量中。LDFLAGS="-shared $LDFLAGS"跑步前先尝试一下f2py