Die geheimnisvolle Natur der Fortran 90 Module

8

Fortran 90 Module sind flüchtige Kreaturen. Ich habe ein (Singular) Modul für eine Weile mit einigem Erfolg verwendet (Kompilierung mit Intel Visual Fortran und Visual Studio 2010). Dann schrieb ich ein anderes Modul und versuchte es in einer anderen Funktion zu verwenden, bevor ich diesen Fehler erhielt:

%Vor%

Also habe ich das beanstandete Modul gelöscht. Aber jetzt bekomme ich den gleichen Fehler nach dem Versuch, auf mein ursprüngliches Modul zuzugreifen!

Wie kann ich diese mysteriösen Kreaturen finden? Warum funktioniert ein Modul, aber nicht zwei? Ich nehme an, dass ich sie löschen und neu kompilieren muss, oder dem Compiler mitteilen, sie irgendwie einzuschließen. Ich kenne die Dateispeicherorte des Quellcodes, aber nicht , wo sie nach kompiliert werden.

    
frostbyyte 06.09.2012, 19:06
quelle

1 Antwort

27

Für diesen spezifischen Prozessor (viele andere Fortran-Prozessoren haben ähnliche Eigenschaften, aber die Details unterscheiden sich):

  • Wenn ein Modul erfolgreich kompiliert wurde, generiert der Compiler eine .mod-Datei (und möglicherweise eine OBJ-Datei), die Informationen über die vom Modul bereitgestellten Entitäten enthält. Auf diese Mod-Datei bezieht sich die Fehlermeldung, auf die Sie sich beziehen. Der Compiler benötigt diese Mod-Datei, wenn er beim Kompilieren einer anderen Quelle auf eine USE-Anweisung für das Modul stößt. (Die Obj-Datei wird in der Verknüpfungsstufe verwendet.)

  • Bevor also ein Modul benutzt wird, muss der Compiler irgendwann den Quellcode für das Modul kompiliert haben. Das bedeutet, dass der Quellcode des Moduls (MODULE ... END MODULE) früher in der Quelldatei vor der USE-Anweisung oder in einer separaten Datei enthalten sein muss, die vor der Quelldatei mit der USE-Anweisung kompiliert wurde.

  • Beim Kompilieren mit einem Intel Fortran-Projekt in Visual Studio versucht die Erstellungsumgebung automatisch, eine geeignete Kompilierungsreihenfolge für die Quelldateien innerhalb eines Projekts anzuordnen. Beim Kompilieren mit dem Befehl ifort über die Befehlszeile ist der Programmierer für die Verwaltung der Kompilierreihenfolge verantwortlich.

  • Das Verzeichnis, das die generierten Mod-Dateien empfängt, wird von der ersten / module Befehlszeilenoption angegeben, die dem Compiler übergeben wird. In Visual Studio wird diese Option mit Fortran & gt; Ausgabedateien & gt; Modulpfad-Eigenschaft In einem Fortran-Projekt in Visual Studio ist diese Eigenschaft standardmäßig auf den Namen der aktuellen Konfiguration eingestellt. Daher werden die Mod-Dateien in einem untergeordneten Verzeichnis des Projekts mit dem Namen Debug oder Release angezeigt. Wenn keine Befehlszeilenoption / modul vorhanden ist, erscheinen die mod-Dateien im aktuellen Verzeichnis.

  • Verzeichnisse, die durch die Befehlszeilenoption / module (oder die entsprechende Visual Studio-Eigenschaft) angegeben werden, werden auch bei der Suche nach Mod-Dateien verwendet. Darüber hinaus werden Verzeichnisse durchsucht, die durch die Befehlszeilenoption / I (in Visual Studio, Fortran & gt; General & gt; Zusätzliche Include-Verzeichnisse) angegeben werden.

Es ist nicht klar aus Ihrer Frage, wie Sie Ihre Module unter Ihren Quelldateien verteilt haben, ob Sie ein einzelnes Visual Studio-Projekt oder mehrere Projekte usw. haben. Wenn Sie nur mit einem einzelnen Projekt arbeiten, dann ist dies normalerweise alles erforderlich ist, alle Fortran-Dateien zu den Quelldateien für das Projekt hinzuzufügen, und die Standardeinstellungen sollten "funktionieren". Fehler beim Finden von Mod-Dateien können folgende Ursachen haben:

  • Die zugehörige Quelle für das Modul befindet sich nicht in einer der Quelldateien für das Projekt.

  • Die Kompilierung der Quelle für ein Modul ist aus einem anderen Grund fehlgeschlagen (sind andere Fehler früher in der Build-Sequenz aufgeführt?)

  • ein Modul wird nach seiner Verwendung in einer bestimmten Quelldatei definiert;

  • Es gibt zirkuläre Abhängigkeiten zwischen Modulen (Modul A verwendet Modul B, das A oder ähnliches verwendet - dies ist nicht durch die Regeln der Sprache erlaubt);

  • ein Quell-Konstrukt, das die automatische Bestimmung der Build-Reihenfolge verwirrt (ältere Versionen des Build-Systems wurden durch die F2003-Form der Verwendung Anweisung mit dem doppelten Doppelpunkt verwirrt, und es ist möglich, USE-Anweisungen zu verschleiern, so dass der Build System kann sie nicht identifizieren), aber diese Aspekte sind ziemlich unklar.

Bei mehreren Fortran-Projekten in Visual Studio müssen möglicherweise die Modulsuchverzeichnisse für abhängige Projekte geändert werden, damit sie die von früheren Projekten in der Projektabhängigkeitsstruktur kompilierten Mod-Dateien finden können. Spätere Versionen von Intel Fortran behandeln diesen Aspekt ebenfalls automatisch, wenn die Einstellungen für projektübergreifende Abhängigkeiten in Visual Studio korrekt sind.

    
IanH 06.09.2012, 23:59
quelle