编译错误:体系结构x86_64的未定义符号

时间:2013-04-09 07:03:07

标签: compilation fortran fft fftw

我正在尝试使用fortran库来执行名为“2Decomp& FFT”(http://www.2decomp.org/download.html)的FFT。这个库有一个内置的FFT引擎,可以很好地处理我的代码。为了将FFTW3引擎与此库一起使用,而不是内置引擎,指令说:

  

在2DECOMP中编辑'src / Makefile.inc'文件,将FFT引擎更改为'FFT = fftw3'。您还需要在同一文件中设置FFTW_PATH变量以指向您的FFTW安装。然后重新编译一切。

我在本地Mac上安装了FFTW3.3并按照说明重新编译了库。然而,在我尝试使用库编译我的代码之后,我在链接时遇到以下错误。

Undefined symbols for architecture x86_64:
"_dfftw_destroy_plan_", referenced from:
  ___decomp_2d_fft_MOD_decomp_2d_fft_finalize in lib2decomp_fft.a(fft_fftw3.o)
"_dfftw_execute_dft_", referenced from:
  ___decomp_2d_fft_MOD_c2c_1m_z in lib2decomp_fft.a(fft_fftw3.o)
  ___decomp_2d_fft_MOD_c2c_1m_x in lib2decomp_fft.a(fft_fftw3.o)
  ___decomp_2d_fft_MOD_c2c_1m_y in lib2decomp_fft.a(fft_fftw3.o)
"_dfftw_execute_dft_c2r_", referenced from:
  ___decomp_2d_fft_MOD_c2r_1m_x in lib2decomp_fft.a(fft_fftw3.o)
  ___decomp_2d_fft_MOD_fft_3d_c2r in lib2decomp_fft.a(fft_fftw3.o)
"_dfftw_execute_dft_r2c_", referenced from:
  ___decomp_2d_fft_MOD_fft_3d_r2c in lib2decomp_fft.a(fft_fftw3.o)
"_dfftw_plan_many_dft_", referenced from:
  ___decomp_2d_fft_MOD_c2c_1m_z_plan in lib2decomp_fft.a(fft_fftw3.o)
  ___decomp_2d_fft_MOD_c2c_1m_x_plan in lib2decomp_fft.a(fft_fftw3.o)
  ___decomp_2d_fft_MOD_c2c_1m_y_plan in lib2decomp_fft.a(fft_fftw3.o)
"_dfftw_plan_many_dft_c2r_", referenced from:
  ___decomp_2d_fft_MOD_init_fft_engine in lib2decomp_fft.a(fft_fftw3.o)
"_dfftw_plan_many_dft_r2c_", referenced from:
  ___decomp_2d_fft_MOD_init_fft_engine in lib2decomp_fft.a(fft_fftw3.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [Sora_v71] Error 1

这是我编写的一个调用此库的最小代码:       程序测试

  use decomp_2d
  use decomp_2d_fft

  integer n, pr, pc

  call decomp_2d_init(n,n,n,pr,pc)
  call decomp_2d_fft_init

  stop
  end

这是我正在使用的Makefile(DECOMP2D是设置到包含库的文件夹的环境变量):

## ------------------------------------------------------------------------
# Lines included for using the 2decomp libraries

INC_2DECOMP = -I$(DECOMP2D)/include/
LIB_2DECOMP = -L$(DECOMP2D)/lib/ -l2decomp_fft

## ------------------------------------------------------------------------

RM           =  rm
SRCDIR       = .
LIBDIR       = .

BIN          = a.out
OBJS         = main.o 

## ------------------------------------------------------------------------

# default command for compiler, linker
FC       =  mpif90

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

## ------------------------------------------------------------------------

# default action
all: $(BIN)

$(BIN): $(OBJS)
@echo Linking $(BIN) .....
$(FC) $(OBJS)  $(LFLAGS) $(FFLAGS) -o $@ 

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

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

0 个答案:

没有答案