Developer Guide

Developer Guide for Intel® oneAPI Math Kernel Library Linux*

ID 766690
Date 10/31/2024
Public
Document Table of Contents

Shared Library Versioning

Intel® oneAPI Math Kernel Library (oneMKL) 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® MKL) 2020 Update 4.

This new feature:

  • Allows applications to work correctly in an environment with multiple oneMKL and/or Intel® MKL packages installed
  • Communicates clearly when incompatible changes are made, and an application should be rebuilt
  • Allows you to link against a specific version of shared libraries

The starting version for shared libraries is “1” and any change that break backward compatibility will result in an increment to this number. Intel expects 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:

  • No changes are required to the link-line because symbolic links are provided 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.
    • For example, libmkl_core.so -> libmkl_core.<version>.so

    • For example, libmkl_core.dylib -> libmkl_core.<version>.dylib
    • 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 distributions).
  • On Windows*, import libraries used in the link-line do not contain any version information, as before, but point to the new DLL, which contains the version information.

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