FLEXPART - это основанная на Фортране модель для моделирования выбросов, переноса и рассеивания атмосферных веществ.
При компиляции исходный код я обнаружил странную ошибку.
Мой make-файл загружен здесь. Ошибка выглядит так:
/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, при этом ошибка показывает, что есть какая-то проблема с флагом -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 не поддерживается в компиляции). Любые советы или подсказки будут оценены!
Спасибо за ваши комментарии. Узнал с веб-сайта Объясните команды Linux.
This option is enabled by default when LTO support in GCC is enabled and GCC was configured for use with a linker supporting plugins (GNU ld 2.21 or newer or gold).
Однако на моем компьютере установлена программа GNU binutils версии 2.17. Поэтому я обновил binutils и перекомпилировал GCC. Тогда эту проблему можно будет исправить.
Вероятно, это связано со способом настройки и сборки gcc / gfortran. См., Например, gcc.gnu.org/ml/gcc-help/2012-04/msg00225.html. Как был сконфигурирован, собран и установлен gcc на вашем компьютере?
@PierredeBuyl. Спасибо за ваши комментарии. Я переустановил binutils и компилятор gcc, чтобы решить эту проблему.
@Стив. Спасибо за ответ. Поскольку для модели необходим плагин -fuse-linker-plugin, мне нужно добавить этот флаг.
@HanZhengzu Должен ли я написать ответ?
@ Пьер де Буйль. Если это удобно, вы можете опубликовать ответ, который будет полезен тем ребятам, у которых есть похожие проблемы.
Вероятно, это связано со способом настройки и сборки gcc / gfortran.
См., Например, https://gcc.gnu.org/ml/gcc-help/2012-04/msg00225.html.
Обязательно соберите gcc с включенным LTO и используйте достаточно свежий компоновщик (программа "ld", часть binutils).
Рассматривали возможность удаления -fuse-linker-plugin из FFLAGS в Makefile?