Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29363 Discussions

Compiling with ifort on an Intel Xeon EM64T

matteo76
Beginner
754 Views
Dear Sir,
I just transported a fortran code from a Compaq Alpha Linux workstation to an Intel Xeon EM64T with Red Hat Enterprise Linux version 4.

Using the free non-commercial fortran compiler downloadable from
http://www.intel.com/cd/software/products/asmo-na/eng/compilers/flin/219857.htm
(intel_fc_80) I encountered the following problems.

Compiling the code with ifort using the options:
-g -static -warn all -L/opt/intel/mkl_7.2.1.003/mkl721/lib/em64t -lmkl_em64t -lpthread

I get it compiled without warnings, but not linked, due to the following:

ld: skipping incompatible /opt/intel/mkl_7.2.1.003/mkl721/lib/em64t/libmkl_em64t.a when searching for -lmkl_em64t
ld: cannot find -lmkl_em64t

Instead, when I use the (32-bit) options:
-g -static -warn all -L/opt/intel/mkl_7.2.1.003/mkl721/lib/32/ -lmkl_ia32 -lpthread

I get it compiled with no warnings and linked with the warnings below:

/opt/intel_fc_80/lib/libifcore.a(for_open_proc.o)(.text+0x3826): In function `for__compute_filename':
: warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/opt/intel_fc_80/lib/libifcore.a(for_open_proc.o)(.text+0x3909): In function `for__compute_filename':
: warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

What does this mean?

Then if I run the executable in this latter case, I get a segmentation fault error:
forrtl: severe (174): SIGSEGV, segmentation fault occurred

Do I need a different non-commercial compiler, suitable for the EM64T processor (intel_fce_80?). Otherwise, how can I make this compiler work on EM64T?

Thank you very much for your time,
Matteo
0 Kudos
3 Replies
Steven_L_Intel1
Employee
754 Views
You do need the l_fce compiler. For non-commercial, at the moment, you must register your compiler at the Intel Registration Center and create a Premier Support account. Log into the Premier Support account, select File Downloads and download the latest compiler package with a name starting with l_fce. Install that. Please read the release notes before installing.
0 Kudos
TimP
Honored Contributor III
754 Views
It does look like you are attempting to link a mixture of 32- and 64-bit components. If you are using (unintentionally) a 32-bit ifort, it should ignore the contents of a 64-bit library, as it appears to have done.

This static linking issue has been nagging us for a while. It comes about when a mixture of static and dynamic link commands is passed to the gnu linker ld, and ld apparently doesn't know whether it has linked the application correctly. If you don't require -static, try removing that to see whether the problem is one of linking. If you do require -static, it may work better with relatively small changes in the link command. Adding the -# option will display the actual command line passed to ld.

Message Edited by tim18 on 07-12-2005 01:12 PM

0 Kudos
matteo76
Beginner
754 Views
Firstly, thank you for your prompt response.

I have installed the intel_fce_80 compiler for EM64T, as you suggested. I have then tried compiling two test programs (one made of a few simple assignments, the other needing MKL libraries), both with and without the -static option.

As for the few-lines code, using the options '-g -static -warn all -lpthread' I get like before:

/opt/intel_fce_80/lib/libifcore.a(for_open_proc.o)(.text+0x3d86): In function `for__compute_filename':
: warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/opt/intel_fce_80/lib/libifcore.a(for_open_proc.o)(.text+0x3e9d): In function `for__compute_filename':
: warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

however the executable runs correctly.

Instead, removing '-static' from the above options, it is compiled and linked without errors, and runs correctly.

Let us come to the second test code, requiring MKL now.

Using the options:
-g -static -warn all -L/opt/intel/mkl_7.2.1.003/mkl721/lib/em64t -lmkl_em64t -lpthread
I get the usual warning:
/opt/intel_fce_80/lib/libifcore.a(for_open_proc.o)(.text+0x3d86): In function `for__compute_filename':
: warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/opt/intel_fce_80/lib/libifcore.a(for_open_proc.o)(.text+0x3e9d): In function `for__compute_filename':
: warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

while taking the -static out from above I get the code compiled and linked with no warnings. But at run time it gives again a segmentation fault error. The code was working perfectly on the other (Alpha) workstation, so it should be correct.

What do you think is wrong at this point?

Thanks a lot,
Matteo
0 Kudos
Reply