Ошибка компиляции GNU Fortran - финализация

Я пытаюсь скомпилировать большой код с использованием компилятора GNU. Однако, когда я пытаюсь скомпилировать прикрепленный кусок кода с помощью GNU Fortran (GCC) 6.1.0, некоторые подпрограммы используют тип fn_grid_nodes_t киньте это сообщение об ошибке:

@bld.. linking,... неопределенные символы для архитектуры x86_64:
"___ final_fn_core_grids_dts_Fn_grid_nodes_t.3665", на который ссылаются: ___fn_depot_utils_MOD_fn_clean_depot в fn_depot_utils.o

Обратите внимание, что при использовании компилятора Intel> 15.0 компиляция прошла успешно. Я подозреваю, что это связано с тем, как GNU и Intel справляются с завершением.

У кого-нибудь есть какие-либо предложения / обходные пути по этому поводу?

type :: fn_grid_nodes_t

    ! mpi communicator
    type(fmpi_fcomm_t) :: fcomm

    ! grid description
    type(fn_grid_descrp_t) :: grid_descrp

    ! grid partition description
    type(fn_parts_descrp_t) :: parts_descrp

    ! node hdr plan
    type(fn_node_hdr_plan_t) :: node_hdr_plan

    ! node elem plan
    type(fn_node_elem_plan_t) :: node_elem_plan

    ! exchanger
    type(fn_exchr_t) :: exchr_nghb

    ! active node count
    integer(kp_i) :: active_ncnt = -1_kp_i

    ! dynamic node array
    type(fn_node_t),allocatable :: nodes(:)

    ! auxiliary
    real(kp_r),allocatable :: aux_block(:,:,:,:)

  end type fn_grid_nodes_t

Спасибо за ваши ответы - некоторые дополнительные детали:

  • ОС = MacOS Sierra 10.12.1
  • Компиляция: Makefile
  • Флаги: -g -Wall -Wextra -fbacktrace -fbounds-check -fcheck-array-temporaries
  • Оптимизация: -O2

Пример компиляции модуля:

# FORCE DEPENDECY BETWEEN MODULE AND OBJECT FILES:
$(INCLUDE_DIR)/fn_core_grids_dts.mod \
: $(OBJ_DIR)/fn_core_grids_dts.o
@printf "$(MK_DECOR_BLD) .. build assumed, <$(MK_COLOR_PURPLE)$@$(MK_COLOR_NORMAL)> <-- <$(MK_COLOR_PURPLE)$<$(MK_COLOR_NORMAL)> ... "
@set -e; \
$(MK_COLOR_CMD_SET_RED); \
_tic=$$($(DATE_EPOCH_SEC)); \
$(TOUCH) $@; \
_toc=$$($(DATE_EPOCH_SEC)); \
$(MK_COLOR_CMD_SET_NORMAL); \
printf "[$(MK_COLOR_BLUE)%3.3ds$(MK_COLOR_NORMAL)]" $$(( $$_toc - $$_tic ))
@printf "$(MK_DECOR_OK)\n"

# COMPILE MODULE:
$(OBJ_DIR)/fn_core_grids_dts.o \
: .concoct/fnode-3d/drv/./src/core/grids/write_fn_core_grids_dts/fn_core_grids_dts.f90 \
$(INCLUDE_DIR)/fn_core_nodes_dts.mod \
$(INCLUDE_DIR)/fn_infix_fmpi.mod \
$(INCLUDE_DIR)/fn_core_grids_common.mod \
$(INCLUDE_DIR)/fn_core_exchangers_dts.mod
@printf "$(MK_DECOR_BLD) .. compiling <$(MK_COLOR_YELLOW)$@$(MK_COLOR_NORMAL)> ... "
@set -e; \
$(MK_COLOR_CMD_SET_RED); \
_tic=$$($(DATE_EPOCH_SEC)); \
$(MKDIRP) $(OBJ_DIR) $(INCLUDE_DIR); \
$(FC) -c $< -o $@ $(FCFLAGS) $(FCFT_DIRSRCH_MOD) $(INCLUDE_DIR) $(addprefix $(FCFT_DIRSRCH_INCLUDE),$(wildcard $(IDIRS) $(PREPROC_DIR))); \
$(TOUCH) $@; \
_toc=$$($(DATE_EPOCH_SEC)); \
$(MK_COLOR_CMD_SET_NORMAL); \
printf "[$(MK_COLOR_BLUE)%3.3ds$(MK_COLOR_NORMAL)]" $$(( $$_toc - $$_tic ))
@printf "$(MK_DECOR_OK)\n"

Часть make-файла, вызывающая проблему:

# FORCE DEPENDECY BETWEEN MODULE AND OBJECT FILES:
$(INCLUDE_DIR)/fn_depot_utils.mod \
: $(OBJ_DIR)/fn_depot_utils.o
@printf "$(MK_DECOR_BLD) .. build assumed, <$(MK_COLOR_PURPLE)$@$(MK_COLOR_NORMAL)> <-- <$(MK_COLOR_PURPLE)$<$(MK_COLOR_NORMAL)> ... "
@set -e; \
$(MK_COLOR_CMD_SET_RED); \
_tic=$$($(DATE_EPOCH_SEC)); \
$(TOUCH) $@; \
_toc=$$($(DATE_EPOCH_SEC)); \
$(MK_COLOR_CMD_SET_NORMAL); \
printf "[$(MK_COLOR_BLUE)%3.3ds$(MK_COLOR_NORMAL)]" $$(( $$_toc - $$_tic ))
@printf "$(MK_DECOR_OK)\n"

# COMPILE MODULE:
$(OBJ_DIR)/fn_depot_utils.o \
: .concoct/fnode-3d/drv/./src/depot/write_fn_depot_utils/fn_depot_utils.f90 \
$(INCLUDE_DIR)/fn_depot_common.mod \
$(INCLUDE_DIR)/fn_depot_share.mod
@printf "$(MK_DECOR_BLD) .. compiling <$(MK_COLOR_YELLOW)$@$(MK_COLOR_NORMAL)> ... "
@set -e; \
$(MK_COLOR_CMD_SET_RED); \
_tic=$$($(DATE_EPOCH_SEC)); \
$(MKDIRP) $(OBJ_DIR) $(INCLUDE_DIR); \
$(FC) -c $< -o $@ $(FCFLAGS) $(FCFT_DIRSRCH_MOD) $(INCLUDE_DIR) $(addprefix $(FCFT_DIRSRCH_INCLUDE),$(wildcard $(IDIRS) $(PREPROC_DIR))); \
$(TOUCH) $@; \
_toc=$$($(DATE_EPOCH_SEC)); \
$(MK_COLOR_CMD_SET_NORMAL); \
printf "[$(MK_COLOR_BLUE)%3.3ds$(MK_COLOR_NORMAL)]" $$(( $$_toc - $$_tic ))
@printf "$(MK_DECOR_OK)\n"

Обратите внимание, что fn_depot_common.mod включает в себя модуль fn_core_grids_dts. Это определенно не проблема, связанная с отсутствующим модулем, не включенным там, где это необходимо.

0 ответов

Другие вопросы по тегам