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

Static Linking of MKL 10.3

dalldredge
Beginner
652 Views
I am having trouble with statically linking the latest verison of the MKL to a F90 program which is built through Visual Studio 2008. We recently upgraded from Intel Fortran 10.1 to Composer XE-2011. In the process of this upgrade we used the included MKL. With the previous version (Fortran 10.1 and MKL 10.0), I simply added the libguide.lib and mkl_c.lib to the project and added the path to the containing folder. I was able to compile and then move the executable to any computer (without MKL installed) and run the exec. I have been able to do a similar process with MKL 10.3 where I include mkl_core.lib , mkl_intel_c.lib , and mkl_intel_thread.lib from the mkl/lib/ia32 folder and the libiomp5md.lib from the compiler/ia32 folder. I can get this to compile and run of the machine containing the MKL, but not when I move it to one that does not have it installed. When I attempt to run the exec, I get a warning that says:


This program can't start because libiomp5md.dll is missing from your computer.



I don't understand why it is looking for a dll when I included the .lib. Am I doing something wrong?
0 Kudos
6 Replies
TimP
Honored Contributor III
652 Views
"md" means multi-threaded dynamic. Link the libiomp5mt.lib if that's the one you want, but take care that it's the only OpenMP library, and is linked only once, in the final link step. The recommended system for doing that has changed from 10.1 to 11.x and again to 12.0 AKA xe-2011, so I don't know the "official" line for the current one.
0 Kudos
mecej4
Honored Contributor III
652 Views
I don't understand why it is looking for a dll when I included the .lib.

The library that you linked against is a stub library (also called "import library") that is paired with the DLL. The stub has just enough information in it to direct calls to the DLL, but the actual code for the called subprograms is in the DLL. For this reason, stub libraries are much smaller than their static-link library counterparts.

The solution: check that the license allows redistributing the missing DLL; if everything is OK, simply copy ibiomp5md.dll to the machine where your application is to be run.
0 Kudos
TimP
Honored Contributor III
652 Views

Use of the term stub library as a synonym for import library is potentially confusing. In your installation, you will have libiomp5stubs5md and mt libraries, which basically serialize the OpenMP calls (probably not what you are looking for).

The libiomp5md.dll is included in the redistributable library package which you can download from https://registrationcenter.intel.com if you have registered your license.

0 Kudos
Ying_H_Intel
Employee
652 Views
Hello dalldredge,

You may solve the problem by includingthestaticlibrary libiomp5mt.lib (mkl_intel_c.lib mkl_intel_thread.lib mkl_core.lib libiomp5mt.lib) or link libiomp5md.lib and distribute libiomp5md.dll as mecej4 adn TimP suggested

Here is some more information for your reference.


1. about http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/optaps/common/optaps_par_libs.htm

Operating System

Dynamic Link

Static Link

Linux

libiomp5.so

libiomp5.a

Mac OS X

libiomp5.dylib

libiomp5.a

Windows

libiomp5md.lib(dynamic import library)
libiomp5md.dll

libiomp5mt.lib



2. OpenMP support changes since Intel IPP 6.0 and Intel MKL 10.1 ...

The legacy OpenMP* run-time library (libguide*)wereswitched to the compatibility library (libiomp*).


3. but you are strongly encouraged to dynamically link in the compatibility OpenMP* run-time
library libiomp (libiomp5md.lib (import) and libiomp5md.dll,even if other libraries are linked statically.

Please see mkl userguide -> Linking with Compiler Support RTLs.

Hope it helps,
Regards,
Ying

0 Kudos
Marshall__Michael_B
652 Views
I have registered my copy of the MKL 10.3, but I don't see a place to download the libiomp5md.dll and libiomp5md.lib. I have installed MKL 10.3 on a 32 bit Win XP machine. Where in there directory structure are these libraries placed? In previous versions they were with the other MKL .lib files.
0 Kudos
Gennady_F_Intel
Moderator
652 Views
for ia32, see\compiler\lib\ia32\,
where == as an example,C:\APPS\Intel\ComposerXE-2011\
for intel64 ( aka em64t) see compiler\lib\intel64\
0 Kudos
Reply