gpt4 book ai didi

c - 在 makefile 中设置库和编译器路径的语法

转载 作者:行者123 更新时间:2023-11-30 16:43:58 39 4
gpt4 key购买 nike

我正在尝试编译一个程序,我必须在 Makefile 中设置 NETCDF inc 和 lib 目录的路径,并设置 gfortran 和 c 编译器设置。变量已经命名为如下所示,它只是告诉我编辑我尝试做的路径/选项。这是我的 netcdf inc 和 lib 以及 hdf5 的内容:

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

请注意,NETCDFLIB 位于我的文件中的一行上,并且变量的路径是正确的,但语法可能不正确。

接下来的 fortran 和 c 编译器信息我有以下内容:

FC   = gfortran -m64 -g -O0 -ffixed-line-length-132 -Wunused -Wuninitialized  
CC = gcc
CFLAGS = -m64 -c -g -I. -DLONG32 -DUNDERSCORE -DLITTLE -Wunused -
Wuninitialized

最后,当我运行该程序时,我首先收到一堆警告,例如:

oban_namelist.f90:495.29:

real :: flt
1
Warning: Unused variable 'flt' declared at (1)

随后是一堆 undefined reference 错误,例如:

oban.o: In function `check':
/uufs/chpc.utah.edu/common/home/zpu-
group3/dhodges/DART/data/radar/opaws/oban.f90:1902: undefined reference to
`__netcdf_MOD_nf90_strerror'

错误不应该出现在这个 oban.o 函数中,因为它不是我写的。我在上面列出的程序中编辑的唯一内容是 netcdf 路径和 gfortran/c 信息,所以我认为错误就在那里。这是我在这里提出的第一个问题,所以如果我遗漏了任何内容,请随时询问。我可以尝试什么?

编辑:根据要求,这是我正在使用的整个 makefile。另外,我只需输入“make”即可按照 README 文件中的说明进行编译。

# 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

最佳答案

通过编辑 NETCDFLIB 行解决了该问题,如下所示:

 I edited the NETCDFLIB line as follows and it works: NETCDFLIB = -Wl,-
rpath=$(NETCDFF_LIBDIR) -L$(NETCDFF_LIBDIR) -Wl,-rpath=$(NETCDFC_LIBDIR) -
L$(NETCDFC_LIBDIR) -lnetcdff -lnetcdf -lm -Wl,-rpath=$(HDF5_LIBDIR) -
L$(HDF5_LIBDIR) -lhdf5_hl -lhdf5 -lz

基本上我只需要添加:

-lnetcdff -lnetcdf -lm

这允许编译器访问它所需的最初未定义的库。

关于c - 在 makefile 中设置库和编译器路径的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835120/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com