Перемещение переполнено общим разделом

У меня есть проект, в котором у меня есть основная программа main.f95 который использует кучу модулей: каждая подпрограмма называется main.f95 содержится в своем собственном модуле. Я сделал это, чтобы избежать блоков интерфейса.

Есть два дополнительных модуля: global.f95 который содержит 8 скалярных целых чисел, объявленных как параметры, и Param.f95 который содержит 33 скалярных вещественных числа (используя рабочую точность NAG, то есть удвоение). Наконец, одна из подпрограмм, упомянутых выше, Set_Param.f95, присваивает значения скалярам, ​​объявленным в Param.f95, Это происходит в самом начале main.f95,

Наконец, я использую библиотеку NAG Fortran (отметка 26) и ifort64-18.

Я получаю следующую ошибку при компиляции (связывание?):

Set_param_mod.o: In function `set_param_mod_mp_set_param_':

Set_param_mod.f95:(.text+0x47): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_rho_i_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0x73): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_theta_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0x84): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_delta_k_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0x95): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_delta_i_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0xa6): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_theta_i_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0xb7): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_theta_k_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0xc8): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_c_e_' defined in COMMON section
in Param.o

Set_param_mod.f95:(.text+0xd2): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_wage_' defined in COMMON
section in Param.o

Set_param_mod.f95:(.text+0xde): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_csi_' defined in COMMON section
in Param.o

Set_param_mod.f95:(.text+0xea): relocation truncated to fit:
R_X86_64_PC32 against symbol `param_mp_b1_' defined in COMMON section
in Param.o

Set_param_mod.f95:(.text+0xf6): additional relocation overflows
omitted from the output

Если я читаю это правильно, переполнение происходит, когда Set_Param.f95 пытается присвоить значения соответствующим скалярным переменным в Param.f95,

Читая другие темы здесь и на форуме разработчиков Intel, может показаться, что это должно происходить только в том случае, если у меня>2 ГБ статических данных (возможно, в ОБЩИХ блоках, которых у меня нет; плюс, как указано выше, мои переменные получить около 2 ГБ). Кроме того, основные предписания, данные этими темами:

i) объявить все ваши большие массивы, выделяемые в вашей основной программе (что я и сделал; однако я не объявил их размещаемыми в отдельных подпрограммах) и

II) объявить все ваши данные в модулях (что я также сделал)

В некоторых ответах упоминается, что проблема может возникнуть с "глобальными" переменными, которые я не уверен, что они подразумевают под Фортраном, особенно из-за предписания ii) выше.

Учитывая то, что в данный момент я довольно растерян, мне интересно, не связана ли эта проблема с тем, что все подпрограммы помещены в отдельный модуль, что делает временные массивы внутри "глобальными" в каком-либо смысле, который подразумевается в этих других потоках?

Любые другие ведет?

0 ответов

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