首页 > 解决方案 > gfortran:错误:编译中不支持-fuse-linker-plugin

问题描述

FLEXPART是一个基于 Fortran 的模型,用于模拟大气物种的排放、传输和扩散。

源代码的编译中,我遇到了一个奇怪的错误。

我的makefile在这里上传。错误显示如下:

/disk2/hyf/lib/gcc-4.9.4/bin/gfortran -o FP_gfs_gfortran par_mod.o          com_mod.o conv_mod.o              hanna_mod.o interpol_mod.o          cmapf_mod.o unc_mod.o               oh_mod.o xmass_mod.o             flux_mod.o point_mod.o             outg_mod.o random_mod.o advance.o     initialize.o writeheader.o      writeheader_txt.o writeheader_surf.o        assignland.o part0.o        gethourlyOH.o caldate.o               partdep.o coordtrafo.o            psih.o raerod.o         readcommand.o drydepokernel.o         readreceptors.o erf.o                   readavailable.o ew.o          readreleases.o readdepo.o psim.o            outgrid_init.o outgrid_init_nest.o photo_O1D.o      readlanduse.o interpol_wind.o         readoutgrid.o interpol_all.o          readpaths.o getrb.o getrc.o getvdep.o               readspecies.o interpol_misslev.o scalev.o pbl_profile.o           readOHfield.o juldate.o interpol_vdep.o         interpol_rain.o hanna.o                 wetdepokernel.o mean.o                  wetdepo.o hanna_short.o           windalign.o hanna1.o gridcheck_nests.o readwind_nests.o        calcpar_nests.o verttransform_nests.o   interpol_all_nests.o interpol_wind_nests.o   interpol_misslev_nests.o interpol_vdep_nests.o   interpol_rain_nests.o readageclasses.o calcfluxes.o            fluxoutput.o qvsat.o                 skplin.o convect43c.o sort2.o                 distance.o centerofmass.o          plumetraj.o openouttraj.o           calcpv.o calcpv_nests.o          distance2.o clustering.o            interpol_wind_short.o interpol_wind_short_nests.o shift_field_0.o shift_field.o openreceptors.o readoutgrid_nest.o writeheader_nest.o writeheader_nest_surf.o wetdepokernel_nest.o drydepokernel_nest.o    zenithangle.o ohreaction.o            getvdep_nests.o initial_cond_calc.o     initial_cond_output.o dynamic_viscosity.o     get_settling.o initialize_cbl_vel.o   re_initialize_particle.o cbl.o          netcdf_output_mod.o releaseparticles.o  partoutput.o conccalc.o init_domainfill.o   concoutput.o timemanager.o FLEXPART.o readpartpositions.o partoutput_short.o concoutput_nest.o boundcond_domainfill.o redist.o concoutput_surf.o    concoutput_surf_nest.o getfields.o calcpar_gfs.o          readwind_gfs.o richardson_gfs.o       verttransform_gfs.o obukhov_gfs.o          gridcheck_gfs.o convmix_gfs.o          calcmatrix_gfs.o -I/disk2/hyf/lib/grib_api/include -I/disk2/hyf/lib/netcdf-4.6.1/include -I/disk2/hyf/lib/hdf5/include -O2  -g -m64 -mcmodel=medium -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O2  -mtune=native -fuse-linker-plugin   -L/disk2/hyf/lib/grib_api/lib -L/disk2/hyf/lib/jasper/lib -L/disk2/hyf/lib/netcdf-4.6.1/lib -L/disk2/hyf/lib/hdf5/lib -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff   
gfortran: error: -fuse-linker-plugin is not supported in this configuration
make: *** [FP_gfs_gfortran] Error 1

在编译路径下,所有的*.o文件都可以从*.f90文件生成,而报错说明flag有问题-fuse-linker-plugin

#My computer system
$uname -a
Linux Xiehost 2.6.18-348.el5 #1 SMP Tue Jan 8 17:53:53 EST 2013 x86_64 x86_64 x86_64 GNU/Linux   

$gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/disk2/hyf/lib/gcc-4.9.4/libexec/gcc/x86_64-unknown-linux-gnu/4.9.4/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.9.4/configure --prefix=/disk2/hyf/lib/gcc-4.9.4 --enable-languages=c,c++,fortran,go
Thread model: posix
gcc version 4.9.4 (GCC) 

我不知道如何解决这个问题(编译中不支持 -fuse-linker-plugin)。任何建议或提示将不胜感激!

附言

感谢您的评论。我从 webste Explain Linux commands学习。

当 GCC 中的 LTO 支持被启用并且 GCC 被配置为与支持插件(GNU ld 2.21 或更新版本或黄金)的链接器一起使用时,此选项默认启用。

但是,我计算机中的 GNU binutils 是 V2.17。因此,我更新了 binutils,并重新编译了 GCC。然后,可以修复此问题。

标签: gcccompiler-errorscompilationfortrangfortran

解决方案


这可能与 gcc/gfortran 的配置和构建方式有关。

例如,参见https://gcc.gnu.org/ml/gcc-help/2012-04/msg00225.html

确保在启用 LTO 的情况下构建 gcc 并使用足够新的链接器(“ld”程序,binutils 的一部分)。


推荐阅读