GFortran und CodeBlocks Problem mit Module und Mehrere Dateien
Arbeite ich mit GFortran und CodeBlocks, aber ich habe ein Problem über Module und Mehrere Dateien.
ich bekomme immer diese Fehlermeldung:
Fatal Error: Can't open module file 'mesh.mod' for reading at (1): No such file or directory
Aus irgendeinem Grund, GFortran ist nicht die 'mesh.mod " - Datei.
Dieses problem tritt nicht auf, wenn ich den gesamten code in einer einzigen .f90-Datei.
Unten wird ein Beispiel-code, dass dieser Fehler passiert.
main.f90
MODULE MESH
IMPLICIT NONE
INTEGER :: IMAX,JMAX,NMAX
REAL(8), ALLOCATABLE :: XD(:),YD(:),FX(:,:),FY(:,:)
REAL(8) :: PI,E,DX,DY,H,L,RHO,MU
PARAMETER (PI = ACOS(-1.D0))
PARAMETER (E = 2.718)
END MODULE MESH
!**************************************************************
program Cavity
Use Mesh
implicit none
Real(8), Allocatable :: func(:)
Real(8) :: Der,DfDx
integer :: i
IMAX=10
DX=1./10
Allocate(xd(IMAX),func(IMAX))
Do i=1,IMAX
xd(i)=i*DX
End Do
Do i=1,IMAX
func(i) = xd(i)**2
End Do
Der=Dfdx(func,2)
Write(*,*) Der
End program Cavity
Derivate.f90
Real(8) Function DfDx(f,i)
Use Mesh
implicit none
Real(8) :: f(1:Imax)
integer :: i
DfDx=(f(i+1)-f(i-1))/(2d0*dx)
return
end function DfDx
Wenn ich Konsole Befehlszeile Zusammenstellung anstelle von CodeBlocks interface habe ich das problem schon gelöst ( Das kompilieren Mehrerer Dateien mit Modulen ), aber ich bin noch immer dieses problem mit CodeBlocks.
Weiß jemand, wie man dieses Problem lösen?
Ich habe noch nie verwendet, CodeBlocks, aber wieder ich denke das Problem ist das kompilieren Dinge nicht in Ordnung. In welcher Reihenfolge werden Sie versuchen, kompilieren Sie das separate Dateien?
Auch der sound ist nicht für unhöflich, aber SO nicht gefällt, Dank/Unterschriften/GRÜßEN bei Fragen noch ist es wie mit dem tag (in diesem Fall fortran90) im Titel. Ich bearbeitet die aus dem anderen Frage und bin über das gleiche hier
Ok... Sorry, ich wusste nicht, über, die. Ich glaube, Sie haben Recht, dies ist wahrscheinlich aufgrund der Zusammenstellung bestellen, aber ich konnte nicht finden alle Optionen über dieses in CodeBlocks. Eigentlich glaube ich nicht wirklich wissen, was Sie CodeBlocks mit f90-Dateien beim kompilieren. Ich hoffe jemand könnte es mir erklären.
Sorry, ich kann dir nicht helfen. Ich verwende CMake als es verfügt über eine automatische Abhängigkeit Scannen und generation. Hoffentlich jemand anderes kann dir helfen, ich habe die codeblocks so dass es für die Menschen, die ihm Folgen.
Verwenden Sie den standardmäßigen Tags fortran für Fortran-Fragen.
Auch der sound ist nicht für unhöflich, aber SO nicht gefällt, Dank/Unterschriften/GRÜßEN bei Fragen noch ist es wie mit dem tag (in diesem Fall fortran90) im Titel. Ich bearbeitet die aus dem anderen Frage und bin über das gleiche hier
Ok... Sorry, ich wusste nicht, über, die. Ich glaube, Sie haben Recht, dies ist wahrscheinlich aufgrund der Zusammenstellung bestellen, aber ich konnte nicht finden alle Optionen über dieses in CodeBlocks. Eigentlich glaube ich nicht wirklich wissen, was Sie CodeBlocks mit f90-Dateien beim kompilieren. Ich hoffe jemand könnte es mir erklären.
Sorry, ich kann dir nicht helfen. Ich verwende CMake als es verfügt über eine automatische Abhängigkeit Scannen und generation. Hoffentlich jemand anderes kann dir helfen, ich habe die codeblocks so dass es für die Menschen, die ihm Folgen.
Verwenden Sie den standardmäßigen Tags fortran für Fortran-Fragen.
InformationsquelleAutor Eleteroboltz | 2013-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, was Sie geschrieben haben, ist, wie dein code ist, dann scheint es, dass das problem ist, dass die
module mesh
ist im Hauptprogramm und nicht in einer separaten Datei. Sie sollten drei Dateien:Mesh.f90
,Derivatives.f90
undMain.f90
.Mesh.f90 ist genau so, wie Sie es haben,
Derivate.f90 sollten so geschrieben werden, als ein weiteres Modul, mit
contains
:und den Main.f90 wird dann
use
beide Module. Beachten Sie, dass ich hatte, zu beseitigen, die variableDfDx
; dies ist, weil es Konflikte mit derfunction DfDx
immodule Derivatives
Ich weiß nicht, wie CodeBlocks funktioniert, aber ich würde vermuten, es lässt Sie wählen der Reihenfolge der Kompilierung. Wenn das der Fall ist, sollten Sie kompilieren Mesh.f90-zuerst, dann-Derivate.f90, dann kompilieren von Main.f90, bevor Sie die Verknüpfung zu einer ausführbaren Datei.
Wenn ich kompiliert & verbunden mit Ihnen, ich habe eine Antwort von 0.200000002980232; hoffentlich, dass links bis zu dem, was Sie als gut.
InformationsquelleAutor Kyle Kanos
Auf codeblock, gehen Sie in die Projekt-Eigenschaften - > Build-targets
Dann wählen Sie die Datei, die Sie möchten, um die erste (sprich mod.f90).
In den "Ausgewählten Datei-Eigenschaften" gehen Sie auf "Build"
Hier ändern Sie die Priorität, Gewicht. Geringeres Gewicht bedeutet, die Datei wird erst gebaut.
InformationsquelleAutor ksr
Das problem ist, dass in CodeBlocks "Projekte erstellt werden in der Reihenfolge der Erscheinung, von oben nach unten" (CodeBlocks Wiki), in anderen Worten, werden die Dateien alphabetisch zusammengestellt.
Das bedeutet, dass in meinem Fall, Derivate.der f90 wurde zusammengestellt werden, bevor Sie als Main.f90-den Fehler verursacht.
Einen Weg, dieses problem zu umgehen ist, um nur die
Main.f90
Datei als build-Ziel in CodeBlocks:Project/Properties...
Build Target Files
auf die RegisterkarteBuild targets
überprüfen nurMain.f90
Und verwenden Sie den Befehl
Include 'File_Name.f90'
innerhalb derMain.f90
code für den anderen gehörenf90
- Dateien für die Kompilierung in der richtigen Reihenfolge.'Project'-->'Properties'-->'Projects dependencies'
zu setzen, dassDerivatives.f90
hängtMesh.f90
.InformationsquelleAutor Eleteroboltz