FORTRAN 95: можно ли поделиться модулем, не делясь исходным кодом?

Я хотел бы иметь возможность поделиться модулем FORTRAN 95, не делясь его исходным кодом. Возможно ли это сделать (возможно, поделившись файлом .MOD)? Если это актуально, я использую компилятор Silverfrost FTN95 на Plato. Пока мне удается сделать это только с помощью исходного кода внешнего модуля. Вот пример:


файл: module_test.f95

module TEST
contains

  subroutine 1
  code...

end module TEST

файл: main_program.f95

include "module_test.f95"
program MAIN_PROGRAM
use TEST
implicit none

code...

end program MAIN_PROGRAM

Итак, может ли кто-нибудь использовать мой модуль TEST без моего файла module_test.f95 или строки include "module_test.f95" в основном коде?

Большое спасибо!


person gilbertohasnofb    schedule 29.08.2013    source источник


Ответы (2)


Вы могли бы предоставить две вещи. 1) Скомпилированный объектный код, возможно, в виде библиотеки. Недостатком является то, что это будет зависеть от компилятора, ОС, возможно, версии компилятора, и поэтому может быть большой нагрузкой для поддержки. 2) Вместо того, чтобы предоставлять исходный код, чтобы другие могли use модуль, вы могли бы написать эквивалентные описания интерфейса ваших подпрограмм. Это, по крайней мере, на уровне исходного кода и не будет зависеть от компилятора. Это потребует некоторой работы по написанию, и ее придется поддерживать, если вы измените аргументы любой из ваших процедур.

person M. S. B.    schedule 29.08.2013

Решение, которое я использую, заключается в том, чтобы, как рекомендовал MSB, скомпилировать модуль в форме библиотеки. Я явно показываю, как я это делаю, на случай, если это может быть кому-то полезно, так как это то, чего я не знал в те дни.

Во-первых, нужно скомпилировать модуль module_test.f95. Используя компилятор gfortran, это можно сделать с помощью команды gfortran -c module_test.f95. Это создаст два файла, module_test.o и module_test.mod. Это скомпилированные файлы модулей, которыми можно поделиться, не делясь исходным кодом.

Теперь к основной программе. Чтобы использовать модуль, нужно добавить строку use TEST, но не include <source code>:

program MAIN_PROGRAM
use TEST
implicit none

<...code...>

end program MAIN_PROGRAM

Теперь при компиляции основной программы нужно указать расположение файла модуля .o в команде. В приведенном выше случае это будет gfortran main_program.f95 module_test.o (предположим, что module_test.o находится в той же папке, что и проект). Это скомпилирует основную программу с использованием модуля без необходимости его исходного кода.

person gilbertohasnofb    schedule 29.06.2017