Релокация переполняется общим разделом

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

Есть два дополнительных модуля: global.f95, который содержит 8 скалярных целых чисел, объявленных в качестве параметров, и Param.f95, который содержит 33 скалярных действительных числа (с использованием рабочей точности NAG, т. е. double). Наконец, одна из упомянутых выше подпрограмм, 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) выше.

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

Любые другие зацепки?


person DrG    schedule 23.02.2018    source источник
comment
Пожалуйста, используйте тег fortran для всех вопросов по Fortran.   -  person Vladimir F    schedule 23.02.2018
comment
Вы искали сообщение об ошибке? stackoverflow .com/questions/12916176/ stackoverflow.com/questions /20687170/ stackoverflow.com/questions/10486116/   -  person Vladimir F    schedule 23.02.2018
comment
Пожалуйста, покажите свой код. В противном случае я должен предположить, что ваш вопрос является дубликатом приведенного выше. Вы должны показать, что это не так, на минимально воспроизводимом примере. Переменные модулей в основном являются глобальными переменными. Есть ли в вашем коде какие-либо большие массивы? НЕ смотрите только на особенности этой подпрограммы. Вы должны рассмотреть полный код. Все переменные модуля.   -  person Vladimir F    schedule 23.02.2018