Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
7038 Discussions

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

gregory-howesuiowa_e
285 Views
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
-------------------------------------
0 Kudos
1 Reply
Dmitry_B_Intel
Employee
285 Views

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
0 Kudos
Reply