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

32-bit vs 64-bit: won't compile

cfgold
Beginner
900 Views
Hello all.

I am having a strange issue compiling a FORTRAN progrom on a 64-bit intel machine (Dell). I can compile the code perfectly if I use the 32-bit ifort. Everything works great.

However, if I try to compile the same code using the 64-bit ifort, it compiles the individual files but fails to link everything at the end.

For example, after it has compiled all the individual files, I get several errors of the variety:

/home/modquad/src/obj/flow.o(.text+0xd8): In function `flow_':
: relocation truncated to fit: R_X86_64_PC32 ichcom_


followed at the end by:

: additional relocation overflows omitted from the output
make: *** [../mycode.exe] Error 1


When I compile using the 64-bit compiler, there are several instances where the compiler says "LOOP WAS VECTORIZED". This message does not appear when compiled using the 32-bit compiler.

Is it possible that the vectorization is preventing the executable from being built? Are there other possibilities to explain the difference?

I have changed the stacksize limit to unlimited. I have also tried compiler options:
-O3 -i-dynamic -mcmodel=large

Any other ideas, options, or suggestions would be greatly appreciated.

Many thanks,
C




0 Kudos
3 Replies
Steven_L_Intel1
Employee
900 Views
You get the vectorization messages because the compiler knows that all of the 64-bit systems supported have SSE2 instructions at least, so it adds an implicit -xW. This is new in 10.0. I doubt this has any connecion to the linking problems.

Are you sure that your library path is for the 64-bit libraries?
0 Kudos
cfgold
Beginner
900 Views
Dear Steve,

Thanks for the reply.

I have the 32-bit and 64-bit directories in /opt/intel. The 32-bit are 'fc' and 'idb', and the 64-bit are in 'fce' and 'idbe'.

Right now in my .bashrc I have the following:

. /opt/intel/fce/10.0.023/bin/ifortvars.sh
. /opt/intel/idbe/10.0.023/bin/idbvars.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/fce/10.0.023/lib:/opt/intel/idbe/10.0.023/lib


so when I want to switch to the 32-bit version, I drop the 'e' in 'fce' and 'idbe', and re-source the .bashrc file.

Right now I am using the 64-bit compiler. When I type 'which ifort', it gives me /opt/intel/fce/10.0.023/bin/ifort, so that seems to be correct. Is there some other library path for the 64-bit libraries, other than what is contained in the /opt/intel/fce/ and /opt/intel/idbe/ directories?

Many thanks,
C

0 Kudos
cfgold
Beginner
900 Views
Oops, seems that my export might have been hacked off. It reads:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:
/opt/intel/fce/10.0.023/lib:
/opt/intel/idbe/10.0.023/lib



except that it is all one line in the .bashrc.
Thanks,C
0 Kudos
Reply