Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
29281 Discussions

Compiling with ifort on an Intel Xeon EM64T

matteo76
Beginner
679 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
679 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
679 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
679 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