8

Los módulos Fortran 90 son criaturas evanescentes. Estuve usando un módulo (singular) por un tiempo con cierto éxito (compilando usando Intel Visual Fortran y Visual Studio 2010). Entonces escribí otro módulo y traté de usarlo en otra función, antes de recibir este error:La misteriosa naturaleza de los módulos Fortran 90

error #7002: Error in opening the compiled module file. Check INCLUDE paths. 

Así que suprime el módulo infractor. ¡Pero ahora recibo el mismo error después de intentar acceder a mi módulo original!

¿Cómo puedo localizar estas misteriosas criaturas? ¿Por qué funciona un módulo pero no dos? Supongo que tengo que eliminarlos y recompilarlos, o decirle al compilador que los incluya de alguna manera. Conozco las ubicaciones de los archivos del código fuente, pero no , donde se compilan en.

Respuesta

27

para ese procesador específico (muchos otros procesadores Fortran tienen características similares, pero los detalles difieren):

  • Cuando un módulo se compila con éxito, el compilador genera un archivo Mod (y tal vez un .obj archivo) que contiene información sobre las entidades proporcionadas por el módulo. Este es el archivo de modificación al que se refiere el mensaje de error que cita. El compilador necesita este archivo de modificación cuando encuentra una declaración USE para el módulo mientras compila otra fuente. (El archivo obj se utiliza en la etapa de enlace.)

  • Por lo tanto, antes de utilizar un módulo, el compilador debe haber compilado en algún momento el código fuente del módulo. Esto significa que el código fuente del módulo (MODULE ... END MODULE) debe haber aparecido antes en el archivo fuente antes de la declaración USE, o debe haber estado en un archivo separado que se compiló antes del archivo fuente con la declaración USE.

  • Al compilar utilizando un proyecto Intel Fortran dentro de Visual Studio, el entorno de compilación intentará organizar automáticamente un orden de compilación apropiado para los archivos fuente de un proyecto. Al compilar utilizando el comando ifort desde la línea de comando, el programador es responsable de administrar la orden de compilación.

  • El directorio que recibe los archivos mod modificados se especifica mediante la primera opción de línea de comando del módulo dada al compilador. En Visual Studio, esta opción se establece mediante la propiedad Fortran> Output Files> Module Path. De forma predeterminada, un proyecto Fortran en Visual Studio tiene esta propiedad configurada para ser el nombre de la configuración actual, por lo tanto, los archivos mod aparecen en un directorio secundario del proyecto llamado Debug o Release. En ausencia de una opción de línea de comando/módulo, los archivos mod aparecen en el directorio actual.

  • Los directorios especificados por la opción de línea de comando/module (o la propiedad equivalente de Visual Studio) también se utilizan en la búsqueda de archivos mod. Además, se buscan los directorios especificados por la opción de línea de comando/I (en Visual Studio, Fortran> General> Directorios de inclusión adicionales).

No es claro por su pregunta en cuanto a cómo se han distribuido entre los módulos de los archivos de origen, si usted tiene un solo proyecto de Visual Studio o múltiples proyectos, etc. Si sólo se trata de un solo proyecto a continuación, típicamente, todo lo que se requiere es agregar todos los archivos Fortran a los archivos Fuente para el proyecto, y la configuración predeterminada debería "funcionar".Los errores en la búsqueda de archivos mod puede ser porque:

  • la fuente asociada para el módulo no se encuentra en uno de los archivos de origen para el proyecto;

  • compilación de la fuente para un módulo fallado por alguna otra razón (hay otros errores enumerados anteriormente en la secuencia de acumulación?)

  • un módulo se define después de su uso en un archivo fuente en particular;

  • existen dependencias circulares entre los módulos (el módulo A usa el módulo B que usa A o similar - esto no está permitido por las reglas del lenguaje);

  • alguna fuente de construcción que confunde la determinación automática del orden de compilación (las versiones anteriores del sistema de compilación se confundieron con la declaración de forma de uso F2003 con dos puntos, además es posible confundir las declaraciones USE de modo que el sistema de compilación no los identifica) pero estos aspectos son bastante oscuros.

Con varios proyectos en Visual Studio Fortran puede haber una necesidad de modificar los directorios de búsqueda del módulo de proyectos dependientes, de modo que pueden encontrar los archivos mod compilados por proyectos anteriores en el árbol de dependencias del proyecto. Las versiones posteriores de Intel Fortran también manejan este aspecto automáticamente, si las configuraciones de dependencia entre proyectos en Visual Studio son correctas.

+4

+1 Respuesta excelente y detallada a una pregunta muy vaga. – Chris

+0

Gracias por su excelente respuesta. Me proporcionó una gran cantidad de información sobre cómo funcionan los módulos en el entorno de Visual Studio. ¡Gracias a ti ahora tengo múltiples módulos trabajando sin fallas! Realmente aprecio que se tome el tiempo de escribir esa explicación. – frostbyyte

Cuestiones relacionadas