To use threaded Intel® MKL, it is highly recommended (you can find more info about the reasons into MKL’s user guide) to compile your code with the /MT option. The compiler driver will pass the option to the linker and the latter will link multi-thread static (MT) run-time libraries.
Despite this recommendation some customers wants to compile the code with /MD options for using multi-threaded version of run-time libraries.
So, while compiling the code under VS2003.NET environment with PARDISO function, customer is getting the following error on linking stage:
“mkl_core.lib(pardiso_parse_ooc_io_errors.obj) : error LNK2019: unresolved external symbol __fseeki64 referenced in function _mkl_pds_isendoffile
Debug/Pardiso.exe : fatal error LNK1120: 1 unresolved externals”
Intel® MKL versions 10.0 and 10.1
Microsoft Visual Studio.NET 2003
Root Cause :
The cause of the problem is the following: dynamic run time libraries from MSVC 2003.NET doesn’t contain _fseeki64 function, whereas static run-time from MSVC 2003 contains this function. This defect was fixed in the next versions of Visual Studio (versions 2005 and 2008). There the static as well dynamic runtime libraries contain __fseeki64 function and as a result PARDISO functionality can link with /MD or with /MT options with MSVC2005 and 2008 environments.
__fseeki64 call was replaced by fseek function call while dynamic runtime libraries are called and as a result your code will be compiled and linked without errors.
This solution is available with MKL 10.1 and later versions.
There are some restrictions of this solution:
• With this solution PARDISO OOC (Out-Of-Core) version doesn't work on files that are bigger that 2048 megabytes (2GB). Therefore if your application will require address space more than 2 GB; you will not solve the problem under VS2003.
• For dynamic linking of the run time libraries, independently of MSVC versions, PARDISO OOC version will work on files only less then 2 GB
• There are no way to dynamically link PARDISO functionality with MKL v. 10.0 or earlier version. The remain solution is to link with static run-time (/MT)
The best solution for overcome this 2 GB limitation is linking PARDISO and MKL with static MSVC run-time (/MT).
As an example of linking PARDISO functionality with dynamic libraries while compiling your code with /MD options, Intel libraries list look like:
"mkl_intel_c_dll.lib mkl_intel_thread_dll.lib mkl_core_dll.lib libiomp5md.lib"