oneMKL Shared Library Versioning

ID 660185
Updated 12/3/2020
Version Latest



Intel® oneAPI Math Kernel Library (Intel® oneMKL) 2021.1 adds shared library versioning for all operating systems and platforms, as opposed to not using any library versioning up to Intel® Math Kernel Library (Intel(R) MKL) 2020 Update 4.

Why this new feature?

1.      Allows applications to work correctly in an environment with multiple Intel® oneMKL and/or Intel® MKL packages installed.

2.      Communicates clearly when incompatible changes are made, and an application should be rebuilt.

3.      Allows developers to link against a specific version of shared libraries.

The starting version for shared libraries is “1” and any change that breaks backward compatibility, will result in increment to this number. We hope to make this change as seldom as possible and inform customers about it at least 24 months in advance.

The product version “2021.1” is now decoupled from the library version, meaning that “2021.2” can ship with shared libraries versioned as “1”. This means that the libraries shipped in “2021.2” are backward compatible with libraries shipped in “2021.1”.

Changes to the link-line:

1.      No changes are required to the link-line, since we provide symbolic links with the old names, which point to the new library that contains the version information on Linux and MacOS. The symbolic link name is also the “soname” and “install_name” of that library on Linux and MacOS respectively.

a.      For example, -> libmkl_core.<version>.so

b.      For example, libmkl_core.dylib -> libmkl_core.<version>.dylib

c.      Hence, using -lmkl_core will still work as before, ensuring backward compatibility with Intel® MKL 2020 line-up (including Intel® Parallel Studio and Intel® System Studio distribution).

2.      On Windows, import libraries used in the link-line do not contain any version information, same as before, but point to the new DLL, which contains the version information.

a.      For example, mkl_core_dll.lib has the same name as before and requires no change to the link-line. Linker, however, resolves this to the new mkl_core.<version>.dll instead of the older mkl_core.dll.