2013-02-20 3 views
0

Fortran 프로그램에서 "decomp_2d"라는 외부 라이브러리를 사용하려고합니다. "decomp_2d"가있는 디렉토리를 가리키는 "DECOMP2D"라고 선언 된 환경 변수가 있습니다. 이 디렉토리의 구조는 다음과 같습니다.Fortran이 외부 라이브러리를 호출 할 수 없습니다.

[[email protected] 2decomp_fft]$ls 
doc examples include lib Makefile README src 
[[email protected] 2decomp_fft]$ls lib/ 
lib2decomp_fft.a Makefile 
[[email protected] 2decomp_fft]$ls include/ 
decomp_2d_fft.mod decomp_2d_io.mod decomp_2d.mod glassman.mod 

다른 디렉토리에서이 라이브러리의 서브 루틴을 사용하는 프로그램을 호출하려고합니다. 하지만이 일을 할 때 컴파일 시간 오류가 발생합니다. 나는 내가 사용하고있는 컴파일러를 사용하고있는 Makefile과 같은 최소한의 포트란 코드를 붙이고있다. 그것은 후지쯔 기계이며, 그들은 내가 컴파일 사용하고 거기에 자신의 포트란 컴파일러가 :

프로그램을 :

program Sora_v71 

! Use the external library 
    use decomp_2d 

    integer n 

    call decomp_2d_init(n,n,n,n,n) 

    stop 
    end 

메이크 :

# Lines included for using the 2decomp libraries 
INC_2DECOMP = -I$(DECOMP2D)/include/ 
L2DECOMP = -L$(DECOMP2D)/lib/ -l2decomp_fft 

## ------------------------------------------------------ 
RM  = rm 
SRCDIR = . 
LIBDIR = . 
BIN  = binary 
OBJS  = main.o 

## ------------------------------------------------------- 
mpifrtpx=$(shell which mpifrtpx) 
FC=$(mpifrtpx) 

FFLAGS = $(F90FLAG) $(INC_2DECOMP) 
LFLAGS = $(F90FLAG) -L$(LIBDIR) $(L2DECOMP) 

## ------------------------------------------------------- 
all: $(BIN) 

$(BIN): $(OBJS) 
    @echo Linking $(BIN) ..... 
    $(FC) $(LFLAGS) -o [email protected] $(OBJS) 

.f.o: 
@echo Compiling $*.f 
$(FC) $(FFLAGS) -c $(SRCDIR)/$*.f 

clean: 
@echo 'Cleaning .....' 
$(RM) -f core *.o *~ *.L *.O $(BIN) $(SIZE_FILE) 

나는 "만들기"를 입력하고 다음 오류가 발생했습니다.

[[email protected] test]$make 
Compiling main.f 
/opt/FJSVtclang/GM-1.2.0-11/bin/mpifrtpx -I/home/hp120242/k00603/2decomp_fft//include/ -c ./main.f 
Linking binary ..... 
/opt/FJSVtclang/GM-1.2.0-11/bin/mpifrtpx -L. -L/home/hp120242/k00603/2decomp_fft//lib/ -l2decomp_fft -o binary main.o 
main.o: In function `MAIN__': 
main.f:(.text+0x4c): undefined reference to `decomp_2d.decomp_2d_init_' 
main.o:(.data+0x0): undefined reference to `decomp_2d.decomp_2d_init_' 
make: *** [binary] Error 1 

아이디어가 있으십니까?

+0

어떤 운영 체제 및 컴파일러를 사용합니까? 후지쯔 벡터 머신입니까? 뒤에있는 경로가 정확합니까? –

+0

후지쯔 스칼라 기계입니다. 그리고 네, 경로가 정확한지 : [k00603 @ fe01p03 2decomp_fft] $ PWD /홈/hp120242/k00603/2decomp_fft [k00603 @ fe01p03 2decomp_fft] $ 에코 $ DECOMP2D /홈/hp120242/k00603/2decomp_fft/ – jhaprade

+0

운영 체제 리눅스이고 컴파일러는 mpifrtpx – jhaprade

답변

2

일부 링커의 경우 연결 명령에서 라이브러리 순서가 중요합니다. 일반적으로 객체 파일을 참조하는 객체 파일을 따라 와야합니다. link 명령에서 $(LFLAGS)$(OBJS)을 전환하십시오.

+0

오! 문제를 해결했습니다. 고마워요 !! – jhaprade

+0

그럴 경우 대답을 수락하십시오. –

관련 문제