0

Fortran プログラムで「decomp_2d」という外部ライブラリを使用しようとしています。「decomp_2d」が配置されているディレクトリを指す「DECOMP2D」と宣言された環境変数があります。このディレクトリの構造は次のとおりです。

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

別のディレクトリで、このライブラリのサブルーチンを使用するプログラムを呼び出そうとしています。しかし、これを行っていると、コンパイル時エラーが発生します。私が使用している最小限の Fortran コードと、コンパイルに使用している Makefile を添付しています。これは富士通のマシンで、コンパイルに使用している独自の fortran コンパイラがあります。

プログラム:

  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 $@ $(OBJS)

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

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

「make」と入力すると、次のエラーが表示されます。

[k00603@fe01p04 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

何か案は?

4

1 に答える 1

2

一部のリンカーでは、リンク コマンドでのライブラリの順序が重要になります。一般に、それらを参照するオブジェクト ファイルの後に配置する必要があります。リンクコマンドで$(LFLAGS)とを切り替えてみてください。$(OBJS)

于 2013-02-20T11:33:03.510 に答える