module fortran fortran95

module - FORTRAN 95: ¿es posible compartir un módulo sin compartir el código fuente?



fortran95 (2)

Me gustaría poder compartir un módulo FORTRAN 95 sin compartir su código fuente. ¿Es posible hacerlo (quizás al compartir el archivo .MOD)? En caso de que esto sea relevante, uso el compilador Silverfrost FTN95 en Plato. Hasta ahora, solo logro hacer que esto funcione usando el código fuente del módulo externo. Aquí hay un ejemplo:

archivo: module_test.f95

module TEST contains subroutine 1 code... end module TEST

archivo: main_program.f95

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

Entonces, ¿sería posible que alguien use mi módulo TEST sin tener mi archivo module_test.f95 ni la línea include "module_test.f95" en el código principal?

¡Muchas gracias!


Podrías proporcionar dos cosas. 1) Código de objeto compilado, posiblemente en forma de biblioteca. La desventaja es que esto dependería del compilador, del sistema operativo, quizás de la versión del compilador, por lo que podría ser una gran carga para el soporte. 2) En lugar de proporcionar el código fuente para que otros puedan use el módulo, puede escribir descripciones de interfaz equivalentes de sus rutinas. Esto, al menos, está en el nivel del código fuente y no dependería del compilador. Sería útil escribir algo y debería mantenerse si modificó los argumentos de cualquiera de sus procedimientos.


La solución que estoy usando es, como recomienda la MSB, para compilar el módulo en forma de biblioteca. Estoy mostrando explícitamente cómo estoy haciendo esto en caso de que esto pueda ser útil para alguien, ya que esto es lo que no sabía en esos días.

Primero, uno necesita compilar el módulo module_test.f95 . Usando el compilador gfortran , esto se puede lograr con el comando gfortran -c module_test.f95 . Esto creará dos archivos, module_test.o y module_test.mod . Estos son los archivos compilados del módulo que se pueden compartir sin compartir el código fuente.

Ahora al programa principal. Para que haga uso del módulo, uno todavía necesita agregar la línea use TEST pero no include <source code> :

program MAIN_PROGRAM use TEST implicit none <...code...> end program MAIN_PROGRAM

Ahora, al compilar el programa principal, uno debe incluir la ubicación del archivo del módulo .o en el comando. En el caso anterior, sería gfortran main_program.f95 module_test.o (suponiendo que module_test.o está en la misma carpeta que el proyecto). Esto compilará el programa principal utilizando el módulo sin la necesidad de su código fuente.