2014-06-20 31 views
0

我有一个C &在FreeBSD开发的Fortran代码,我想在我的Windows系统上运行。所以我使用Cygwin作为选择。 除了代码之外,还有一个Makefile,我试过并对Makefile做了一些修改。现在makefile运行完美,但是在makefile中的一个地方,它给我带来了与Fortran和Lapack库有关的大量错误。 我检查过我的图书馆,他们都出现在我的系统中。 在提到论坛的相关问题后,我尝试并使用了很多选项。但那并不奏效。 而我是这个Makefile的新手。 请帮我解决这些错误。FreeBSD使用Cygwin的Windows


以下是Makefile中


#BASE_DIR=.. 
STD_LIB= -lm -llapack -lblas -lgcc -lgfortran 
#PROF_LIB=-lm_p -llapack_p -lblas_p -lg2c_p -L/usr/local/lib/gcc46 -lgfortran 
#PROF=-pg 

:if empty(PROF) 
LDFLAGS=$(STD_LIB) 
:else 
LDFLAGS=$(PROF_LIB) 
:endif 


#LDFLAGS+=-L $(TOOL_DIR)/trapfpe -ltrapfpe 

#test:: 
# echo LDFLAG=$(LDFLAGS) 

CC=/usr/bin/gcc 
FC=/usr/bin/gfortran 
CFLAGS= -g -ggdb -O3 -ffast-math -I -Wall $(PROF) 
#CFLAGS= -g -ffast-math -I -Wall $(PROF) 
FFLAGS= -g -I -Wall $(PROF) -fbounds-check 
COMMON_OBJS=phase_unwrapping-lib.o matrix.o splotlib.o args_lib.o 
UNWRAP_TOOL=rot_comp_unwrap 
SUB=res_pos 
ALL=$(UNWRAP_TOOL) 
WORK=$(ALL) 
WORK+=poisson_test boundary_search clustering band_matrix 

default:: ctags $(WORK) 
all:: $(ALL) 

ctags::tags 
tags:$(WORK:C/$/.c/) $(SUB:C/$/.c/) 
ctags -w $ $^ 
# ctags -w $ (.ALLSRC) 

GA_OBJS=res_pos.o ga-core.o ga-fit.o data.o 
CLUSTERING_OBJS=clustering.o 
BOUNDARY_SUB_OBJS=poisson_enclosed_Neumann.o intlin.o solve_flux_eps_least_norm.o  band_matrix.o 
BOUNDARY_OBJS=boundary_search.o $(BOUNDARY_SUB_OBJS) 

SRCS=rot_comp_unwrap.c clustering.c boundary_search.c poisson_test.c res_pos.c band_matrix.c 


rot_comp_unwrap:rot_comp_unwrap.o $(GA_OBJS) $(CLUSTERING_OBJS) $(BOUNDARY_OBJS) $(COMMON_OBJS) 
$(CC) $(CFLAGS) -o [email protected] $(LDFLAGS) $^ 
# $(CC) $(CFLAGS) -o $(.TARGET) $(LDFLAGS) $(.ALLSRC) 
res_pos:res_pos.c ga-core.o ga-fit.o data.o 
$(CC) -o [email protected] -DMAIN $(CFLAGS) $(LDFLAGS) $^ 
# $(CC) -o $(.TARGET) -DMAIN $(CFLAGS) $(LDFLAGS) $(.ALLSRC) 

poisson_test:poisson_test.o poisson_enclosed_Neumann.o intlin.o 
$(CC) -o [email protected] $(CFLAGS) $(LDFLAGS) $^ 
# $(CC) -o $(.TARGET) $(CFLAGS) $(LDFLAGS) $(.ALLSRC) 

boundary_search:boundary_search.c $(BOUNDARY_SUB_OBJS) $(COMMON_OBJS) 
$(CC) -DMAIN $(CFLAGS) -O3 -o [email protected] $(LDFLAGS) $^ 
# $(CC) -DMAIN $(CFLAGS) -O3 -o $(.TARGET) $(LDFLAGS) $(.ALLSRC) 

band_matrix:band_matrix.c $(COMMON_OBJS) 
$(CC) -DMAIN $(CFLAGS) -ffast-math -o [email protected] $(LDFLAGS) $^ 
# $(CC) -DMAIN $(CFLAGS) -ffast-math -o $(.TARGET) $(LDFLAGS) $(.ALLSRC) 
clustering:clustering.c $(COMMON_OBJS) 
$(CC) -DMAIN $(CFLAGS) -ffast-math -o [email protected] $(LDFLAGS) $^ 
# $(CC) -DMAIN $(CFLAGS) -ffast-math -o $(.TARGET) $(LDFLAGS) $(.ALLSRC) 

clean:: 
rm *.o 

backup:: 
cp -pf *.c *.F *.h *.o Makefile $(WORK) bak 

depend:: 
mkdep ${CFLAGS} ${SRCS} 

以下是我得到


/usr/bin/gcc -g -ggdb -O3 -ffast-math -I -Wall -o rot_comp_unwrap rot_comp_unwrap.o res_pos.o ga-core.o ga-fit.o data.o clustering.o boundary_search.o poisson_enclosed_Neumann.o intlin.o solve_flux_eps_least_norm.o band_matrix.o phase_unwrapping-lib.o matrix.o splotlib.o args_lib.o 
ga-core.o: In function `cpgene_': 

/cygdrive/e/Lc-code1/ga-core.F:93: undefined reference to `_gfortran_runtime_error_at' 

/cygdrive/e/Lc-code1/ga-core.F:93:(.text+0x5c): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_gfortran_runtime_error_at' 

/cygdrive/e/Lc-code1/ga-core.F:113:(.text+0x459): additional relocation overflows omitted from the output 

/cygdrive/e/Lc-code1/ga-core.F:116: undefined reference to `_gfortran_transfer_real_write' 

/cygdrive/e/Lc-code1/ga-core.F:116: undefined reference to `_gfortran_st_write_done' 

ga-core.o: In function `fluct_': 

/cygdrive/e/Lc-code1/ga-core.F:274: undefined reference to `_gfortran_rand' 

ga-core.o:/cygdrive/e/Lc-code1/ga-core.F:278: more undefined references to `_gfortran_runtime_error_at' follow 

ga-fit.o: In function `gapara_': 

/cygdrive/e/Lc-code1/ga-fit.F:241: undefined reference to `_gfortran_st_open' 

/cygdrive/e/Lc-code1/ga-fit.F:243: undefined reference to `_gfortran_st_read' 

/cygdrive/e/Lc-code1/ga-fit.F:243: undefined reference to `_gfortran_transfer_integer' 

/cygdrive/e/Lc-code1/ga-fit.F:243: undefined reference to `_gfortran_st_read_done' 

/cygdrive/e/Lc-code1/ga-fit.F:244: undefined reference to `_gfortran_st_read' 

/cygdrive/e/Lc-code1/solve_flux_eps_least_norm.F:73: undefined reference to `dgesv_' 

/cygdrive/e/Lc-code1/solve_flux_eps_least_norm.F:109: undefined reference to `dgbsv_' 

collect2: error: ld returned 1 exit status 
Makefile:47: recipe for target 'rot_comp_unwrap' failed 
make: *** [rot_comp_unwrap] Error 1 

回答

1

你掉了所有外部librar错误从你的链接标志。将STD_LIB的库添加到您的命令中

+0

您能否详细说明您的答案要做什么。 – user3759985

+0

取消注释行LDFLAGS = $(STD_LIB) – arved

+0

我做到了这一点,但它又犯了同样的错误。扩展名为.f和.F的Fortran文件之间有任何区别。因为我所有的fortran文件都带有.F扩展名。 – user3759985