Ich versuche ein Programm zu kompilieren und ich muss die Pfade zu den NETCDF inc und lib Verzeichnissen im Makefile setzen sowie die gfortran und c Compiler Einstellungen setzen. Die Variablen wurden bereits wie unten gezeigt benannt, sie haben mir lediglich gesagt, dass ich die Pfade/Optionen bearbeiten soll, die ich versucht habe. Hier ist, was ich für meine netcdf inc und lib, sowie die hdf5:Syntax zum Setzen von Pfaden zu Bibliothek und Compiler in Makefile
NETCDFINC = -I$(NETCDFF_INCDIR) -I$(NETCDFC_INCDIR)
NETCDFLIB = -Wl,-rpath=$(NETCDFF_LIBDIR) -L$(NETCDFF_LIBDIR) -Wl,-
rpath=$(NETCDFC_LIBDIR) -L$(NETCDFC_LIBDIR) -Wl,-rpath=$(HDF5_LIBDIR) -
L$(HDF5_LIBDIR) -lhdf5_hl -lhdf5 -lz
Beachten Sie, dass die NETCDFLIB auf einer Linie auf meine Datei ist, und die Pfade der Variablen sind korrekt, aber die Syntax kann nicht sein.
Weiter für die Fortran und C-Compiler Informationen habe ich die folgenden:
FC = gfortran -m64 -g -O0 -ffixed-line-length-132 -Wunused -Wuninitialized
CC = gcc
CFLAGS = -m64 -c -g -I. -DLONG32 -DUNDERSCORE -DLITTLE -Wunused -
Wuninitialized
Schließlich, wenn ich das Programm ausführen ich zum ersten Mal eine Reihe von Warnungen erhalten wie:
oban_namelist.f90:495.29:
real :: flt
1
Warning: Unused variable 'flt' declared at (1)
Gefolgt von eine Reihe von undefinierten Referenzfehlern wie:
Der Fehler sollte nicht sein diese oban.o Funktion, da ich sie nicht geschrieben habe. Die einzigen Dinge, die ich in dem oben genannten Programm für den netcdf-Pfad und die gfortran/c-Informationen bearbeitet habe, und so denke ich, liegt der Fehler da. Das ist meine erste Frage hier, also wenn ich etwas verpasst habe, könntest du gerne fragen. Was kann ich versuchen?
Edit: Auf Wunsch ist dies das gesamte Makefile, das ich verwende. Außerdem gebe ich einfach 'make' ein, um es gemäß den Anweisungen in der README-Datei zu kompilieren.
# Makefile for creating the OPAWS analysis software
#
# Rev: 02/05/10 LJW
# 12/05/10 DCD
# 02/11/11 LJW
#
# netCDF4 libs - you need to fill in the blanks
NETCDFINC = -I$(NETCDFF_INCDIR) -I$(NETCDFC_INCDIR)
NETCDFLIB = -Wl,-rpath=$(NETCDFF_LIBDIR) -L$(NETCDFF_LIBDIR) -Wl,-rpath=$(NETCDFC_LIBDIR) -L$(NETCDFC_LIBDIR) -Wl,-rpath=$(HDF5_LIBDIR) -
L$(HDF5_LIBDIR) -lhdf5_hl -lhdf5 -lz
# Fortran and C compiler information - various configurations are setup, try and find one close
#=====>> Gfortran
#
FC = gfortran -m64 -g -O0 -ffixed-line-length-132 -Wunused -Wuninitialized
CC = gcc
CFLAGS = -m64 -c -g -I. -DLONG32 -DUNDERSCORE -DLITTLE -Wunused -Wuninitialized
# Leave this stuff alone
EXEC = x.oban
EXECcs = x.clutter_stats
EXECmd = mosaic_2_dart
OBJS = DART.o oban_module.o dict_module.o oban_namelist.o derived_types.o util.o fileio.o read_dorade.o binio.o v5d.o
OBJScs = DART.o dict_module.o oban_namelist.o derived_types.o fileio.o util.o read_dorade.o binio.o v5d.o
OBJSmd = DART.o dict_module.o oban_namelist.o derived_types.o fileio.o util.o read_dorade.o binio.o v5d.o
default: $(EXEC) $(EXECcs) $(EXECmd)
$(EXEC): $(OBJS) oban.o
$(FC) $(OPT) -o $(EXEC) oban.o $(OBJS) $(NETCDFLIB)
$(EXECcs): $(OBJScs) clutter_stats.o
$(FC) $(OPT) -o $(EXECcs) clutter_stats.o $(OBJScs) $(NETCDFLIB)
$(EXECmd): $(OBJSmd) mosaic_2_dart.o
$(FC) $(OPT) -o $(EXECmd) mosaic_2_dart.o $(OBJSmd) $(NETCDFLIB)
clean:
rm $(EXEC) oban.o $(OBJS) $(EXECcs) clutter_stats.o $(OBJScs) $(EXECmd) mosaic_2_dart.o $(OBJSmd) *.mod ncgen.input *.pyc sweep_file_list.txt
# Individual compilation instructions
oban.o: oban.f90 structures.inc opaws.inc DART.o
$(FC) $(OPT) -c $(NETCDFINC) oban.f90
clutter_stats.o: clutter_stats.f90 opaws.inc
$(FC) $(OPT) -c $(NETCDFINC) clutter_stats.f90
mosaic_2_dart.o: mosaic_2_dart.f90 opaws.inc
$(FC) $(OPT) -c $(NETCDFINC) mosaic_2_dart.f90
oban_module.o: oban_module.f90 derived_types.o opaws.inc
$(FC) $(OPT) -c oban_module.f90
read_dorade.o: read_dorade.c read_dorade.h
$(CC) $(CFLAGS) -c read_dorade.c
fileio.o: fileio.f90
$(FC) $(OPT) $(NETCDFINC) -c fileio.f90
util.o: util.f opaws.inc structures.inc
$(FC) $(OPT) -c util.f
DART.o: DART.f
$(FC) $(OPT) -c DART.f
derived_types.o: derived_types.f90
$(FC) $(OPT) -c derived_types.f90
oban_namelist.o: oban_namelist.f90 opaws.inc
$(FC) $(OPT) -c oban_namelist.f90
dict_module.o: dict_module.f90
$(FC) $(OPT) -c dict_module.f90
binio.o: binio.c
$(CC) $(CFLAGS) binio.c -o binio.o
v5d.o: v5d.c
$(CC) $(CFLAGS) v5d.c -o v5d.o
Der 'undefinierte Verweis auf '__netcdf_MOD_nf90_strerror' ist ein Linkerfehler. (das 'f90' deutet darauf hin, dass es Fortran ist) Es sagt dir, es weiß nicht, was' __netcdf_MOD_nf90_strerror' ist. Möglicherweise, weil Sie einen Header-Include (oder einen "-I/path/to/it") verpasst haben oder er nicht deklariert wurde, bevor er verwendet wird. Veröffentlichen Sie das gesamte Makefile zusammen mit einer Kompilierungszeichenfolge, mit der Sie Ihren Code erfolgreich erstellen können (falls vorhanden). So können wir eingrenzen, wo das Problem liegt. –
Haben Sie immer noch eine Kopie von der Originalzeile, die Sie zum Vergleich geändert haben? Ohne zu wissen, wie man kompiliert, was man versucht zu kompilieren, macht es die Antwort sehr schwierig. Die 'oban.o' Bibliothek kann keine Deklaration für' __netcdf_MOD_nf90_strerror' sehen. Haben Sie die Reihenfolge der Teile der Variablen im Makefile geändert? Es sucht nach etwas, das möglicherweise angegeben werden muss, bevor "oban.o" in der Kompilierzeichenfolge erreicht wird. –
Ich habe das Makefile oben hinzugefügt.Auch der ursprüngliche Code war wie folgt mit Leerzeichen für mich zu bearbeiten: NETCDFINC = -I///netcdf4-64/enthalten NETCDFLIB = -L///netcdf4-64/lib-lm-lnetcdf -L///hdf5/lib - lhdf5_hl -lhdf5 lz und FC = gfortran -m64 -G -O0 -Wl, -stack_size, 10000000 -ffixed-line- längen 132 -Wunused -Wuninitialized CC = gcc CFLAGS- = -m64 -c -g -I. -DLONG32 -DUNDERSCORE -DLITTLE - Wunused -Initialisiert Zum kompilieren gebe ich einfach make ein, was die Instruktionen zu tun haben. Ich habe die Reihenfolge, in der sie aufgerufen werden, nicht geändert. –