"file is not of required architecture" error using FFTW2 wrappers for Intel Fortran and GCC4

"file is not of required architecture" error using FFTW2 wrappers for Intel Fortran and GCC4

I have been trying to compile a Fortran90 code written to use FFTW2 calls using the MKL library wrappers for FFTW2. However, although I can make the library file with the correct F77 calls libfftw2xf_gnu.a, when I get to the link stage, it always fails with the warning

ld warning: in /opt/intel/Compiler/11.0/056/Frameworks/mkl/lib/em64t/libfftw2xf_gnu.a, file is not of required architecture

I don't understand what is causing the wrong architecture in the library, nor what compiler flags I need in order to get it to produce files of the correct architecture. Any help you can give would be much appreciated.

As a side note, I tried one the example files that come with MKL (after hacking it to enable compilation with gnu C), and it failed with the same error.

Sincerely,
Greg

The full output for my compilation is below
-------------------------------------------------

% make
ifort -c -I/opt/intel/Compiler/11.0/056/Frameworks/mkl/include/fftw src/twopoint_var.f90
ifort -c -I/opt/intel/Compiler/11.0/056/Frameworks/mkl/include/fftw src/twopoint_om.f90
ifort -c -I/opt/intel/Compiler/11.0/056/Frameworks/mkl/include/fftw src/twopoint_funcs.f90
ifort -c -I/opt/intel/Compiler/11.0/056/Frameworks/mkl/include/fftw src/twopoint_ffts.f90
ifort -c -I/opt/intel/Compiler/11.0/056/Frameworks/mkl/include/fftw src/twopoint_spectra.f90

ifort -c -I/opt/intel/Compiler/11.0/056/Frameworks/mkl/include/fftw src/twopoint.f90

ifort -o twopoint.e twopoint_var.o twopoint_om.o twopoint_funcs.o twopoint_ffts.o twopoint_spectra.o twopoint.o -I/opt/intel/Compiler/11.0/056/Frameworks/m
kl/include/fftw -lfftw2xf_gnu -L/opt/intel/Compiler/11.0/056/Frameworks/mkl/lib/em64t
ld warning: in /opt/intel/Compiler/11.0/056/Frameworks/mkl/lib/em64t/libfftw2xf_gnu.a, file is not of required architecture
Undefined symbols:
"_fftwnd_f77_create_plan___", referenced from:
_twopoint_ffts_mp_init_transforms_ in twopoint_ffts.o
_twopoint_ffts_mp_init_transforms_ in twopoint_ffts.o
_twopoint_ffts_mp_init_transforms_ in twopoint_ffts.o
_twopoint_ffts_mp_init_transforms_ in twopoint_ffts.o
"_fftwnd_f77_one__", referenced from:
_twopoint_spectra_mp_calc_bfield_ in twopoint_spectra.o
_MAIN__ in twopoint.o
_MAIN__ in twopoint.o
_MAIN__ in twopoint.o
"_fftwnd_f77_destroy_plan___", referenced from:
_twopoint_ffts_mp_finish_tranforms_ in twopoint_ffts.o
_twopoint_ffts_mp_finish_tranforms_ in twopoint_ffts.o
_twopoint_ffts_mp_finish_tranforms_ in twopoint_ffts.o
_twopoint_ffts_mp_finish_tranforms_ in twopoint_ffts.o
"_fftwnd_f77_one_", referenced from:
_twopoint_spectra_mp_output_kspec_ in twopoint_spectra.o
_twopoint_spectra_mp_output_kspec_ in twopoint_spectra.o
ld: symbol(s) not found
make: *** [two] Error 1
-------------------------------------

2 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.

Hi Greg,

Looks like the gcc compiler used to build libfftwxf_gnu.a produced32 bit code, while ifort wants the library with 64-bit code.To build the correct library one should run 'make libem64t' in the interfaces/fftw2xf directory.

Thanks
Dima

Kommentar hinterlassen

Bitte anmelden, um einen Kommentar hinzuzufügen. Sie sind noch nicht Mitglied? Jetzt teilnehmen