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

LNK1112: module machine type 'IA64' conflicts with target machine type 'x64'

Alastair_S
Beginner
1,268 Views

Hello all

All I need to do is tell the compiler/linker that my [module] machine is x64/amd64 & not IA64 but how?

I get this error (fatal error LNK1112: module machine type 'IA64' conflicts with target machine type 'x64') when trying to create a DLL from Fortran source. This is the same error code as another thread on this forum but differs in a couple of ways. Firstly the module & target machine types are different, but more importantly I am not using Visual Studio, so cannot apply the fixes suggested in the other thread (http://software.intel.com/en-us/forums/showthread.php?t=61666)

Detail: I am trying to port our application to support 64 bit. We use several third party DLLs and have obtained the source code for several of these. I am using a 64 bit Vista machine and I can build the Fortran source to a 32 bit DLL without any problem using the Intel Fortran Build for IA-32 Applications cmd prompt. However when I use the 64 bit application cmd prompt I get the above error. I cannot find an equivalent option to the [VS] /MACHINE switch. I have all the required SKDs & Visual Studio 8 installed.

The cmd line I am using is:

ifort /dll /Qsave /exe:DLLName.dll /architecture:SSE3 /libs:static /MT /map: DLLName.map %LINK_F90_STATIC% one_of_several_source_code.F ...

Most of the compiler switches were already provided with the source. I have added the /MT (to stop dependency on libc.lib which is not installed with VS 2005 or 2008 but did come with 2003) & /architecture options.

I am C# person without any C++ or Fortran experience so I am not to keen to create a VS C++ solution, and I defiantly dont want to touch the Fortran source code provided to us.

Any help would be much appreciated.

0 Kudos
7 Replies
Steven_L_Intel1
Employee
1,270 Views
This error means that one of the objects or libraries you are linking in was built for the IA-64 (Intel Itanium) architecture. You left out the rest of the message that names the problem module so it's difficult to offer more detailed suggestions.

It is unfortunately common to be confused by the similarity in names between IA-64 and Intel 64/x64. Sometimes users download and install the IA-64 compiler thinking that's what they want for a "64-bit application" but in almost all cases, what they want is "Intel 64" (or x64) instead. Perhaps you somehow have IA-64 libraries being linked in.

You cannot fix this with a switch. You have to identify the problem object or library and either recompile it with the correct compiler or link in the correct version of this object or library.

What's the full message with the name of the IA-64 module?
0 Kudos
Alastair_S
Beginner
1,268 Views
Thanks for your prompt reply Steve :)

The full error line is: imsl.lib(bs3vl.obj) : fatal error LNK1112: module machine type 'IA64' conflicts with target machine type 'x64'

which points to IMSL being the problem. I'm using the "with IMSL" edition of Intel Visual Fortran Compiler 11.0 Professional Edition for Windows* which ships with version 5 of IMSL (i.e. not the latest), but clearly states that it supports "IA-32, Intel 64, and IA-64 architectures". However the IMSL installer only has install options for IA-32 and Itanium. The ReadMe files for the Itanium install of IMSL speaks of "Microsoft Windows XP (64-bit), Windows Server 2003 (64-bit)" but I guess only in the context of Itanium.

So now I'll check I've got the correct enviroment & batch files set up correctly & check with Visual Numerics to see just what platforms & versions they support.


0 Kudos
Steven_L_Intel1
Employee
1,270 Views
Hmm - some confusion here. The IMSL provided with Intel Fortran 11 is IMSL 6.0, the latest. There are three separate downloads, one for IA-32, one for IA-64 and one for Intel 64. You probably selected the IA-64 download by mistake. Uninstall IMSL and download the correct "Intel 64" installer and install it. You'll also want to make sure that you have properly listed the "Intel64" library folder in Tools > Options > Intel Fortran > Compiler > Library files.

Please see this Knowledge Base article for more information.
0 Kudos
Seun_A_
Beginner
1,270 Views

Hello all,

I have a similar (possibly same) problem as Alistair. I recieve this error when I try to link "user32.lib(USER32.dll) : fatal error LNK1112: module machine type 'IA64' conflicts with target machine type 'x64'. 

I am using visual studio 2008 and intel fortran compiler 11.1. I'm also pretty sure I downloaded the right fortran version i.e. intel64. When I attempt to make sure "that I have properly listed the "Intel64" library folder in Tools > Options > Intel Fortran > Compiler > Library files", I found i don't actually have this path, instead I have "Tools > Options > Intel Composer XE > Compiler > Library files". Could this be part of the problem? I had initially installed Composer XE and then realised it was the wrong version for my compiling needs (linking in Ansys version 14.5).

I would appreciate any help/suggestions.

0 Kudos
Steven_L_Intel1
Employee
1,270 Views

No, you downloaded the "IA-64" compiler which is for Intel Itanium processors.  The path you found is for a newer product which you probably installed earlier.

Uninstall the 11.1 compiler and download instead the compiler for both IA-32 and Intel 64 development. Install that.

0 Kudos
Seun_A_
Beginner
1,270 Views

Hi Steve,

Thank you very much for your help and quick reply. It turns out I had the correct version of intel fortran (i.e. intel64) but one of the SDK object libraries I was using was for the IA64 version, hence the error message. I am now able to link successfully.

Thanks again

0 Kudos
Steven_L_Intel1
Employee
1,270 Views

Ok, glad to hear it.

0 Kudos
Reply