Я пытаюсь создать make-файл, чтобы скомпилировать C-программу, а затем связать ее с библиотекой fortran под названием MUMPS (которая также нуждается в библиотеках blas и pthread). Поэтому моя идея состояла в том, чтобы скомпилировать gcc, а затем связать gfortran. вот что я получил.makefile связывание библиотеки fortran с программой C
ROOT = $(addprefix $(PWD), /)
BUILDS_DIR = $(addprefix $(ROOT), builds/)
SRCS_DIR = $(addprefix $(ROOT), src/)
INCS_DIR = $(addprefix $(ROOT), src/)
OBJS_DIR = $(addprefix $(SRCS_DIR), objects/)
LIBS_DIR =
MUMPS_DIR = $(MUMPS_ROOT)
MUMPS_INCS_DIR = $(addprefix $(MUMPS_DIR), /include)
MUMPS_LIB_DIR = $(addprefix $(MUMPS_DIR), /lib)
MUMPS_MPI_DIR = $(addprefix $(MUMPS_ROOT), /libseq)
CC = gcc -c
CFLAGS = -O3 -DTRILIBRARY
INCLUDES = -I$(INCS_DIR) -I$(MUMPS_INCS_DIR)
FL = gfortran -o
LFLAGS = -L$(LIBS_DIR) -L$(MUMPS_LIB_DIR) -L$(MUMPS_MPI_DIR)
CLIBS = -lm
FLIBS = -lblas
LDLIBS = -lpthread
MUMPS_LIBS = -ldmumps -ldmumps_seq -lmumps_common -lmumps_common_seq -lpord -lpord_seq -lmpiseq
LIBS = $(CLIBS) $(FLIBS) $(LDFLIBS) $(MUMPS_LIBS)
в то время как правила
default: $(TARGET)
$(TARGET): $(OBJS)
@echo -e "\n\n\t\t*** Compile successfully! ***\n" ;
$(FL) $(BUILDS_DIR)[email protected] $(LFLAGS) $(LIBS) \
$(OBJS)
@echo -e "\n\n\t\t*** Linking complete! ***\n"
$(OBJS): $(OBJS_DIR)%.o : $(SRCS_DIR)%.c
$(CC) $(CFLAGS) $(INCLUDES) \
$<\
-o [email protected]
К сожалению, это не работает, и это дает мне ошибку
/usr/bin/ld: cannot find -ldmumps
/usr/bin/ld: cannot find -ldmumps_seq
/usr/bin/ld: cannot find -lmumps_common
/usr/bin/ld: cannot find -lmumps_common_seq
/usr/bin/ld: cannot find -lpord
/usr/bin/ld: cannot find -lpord_seq
, где я не права?
Обновление: на самом деле я нашел ошибку в своем make-файле. На этапе связывания я вызывал библиотеки перед объектами.o и, видимо, это неприемлемо. Фактически, он пытался связать библиотеки с некоторыми объектными файлами, которые я еще не вызывал. если я ставлю $ (LIBS) после $ (OBJS), все получится. Надеюсь, это может быть полезно кому-то другому.
Это результат связи с '$ (FL)'? –
Вы могли бы добавить что-то вроде 'echo $ (MUMPS_LIB_DIR)' в свою цель, чтобы проверить, правильно ли оно установлено? – francis
извините за задержку. да, я проверил путь, и он правильный. – Stefano