Fortran applications that use the Rogue Wave* IMSL* Fortran Numerical Library, specify linking to the static library form of IMSL, and build under Microsoft Visual Studio 2015* (or from a command prompt environment using the Visual Studio 2015 C++ libraries) may get linker errors such as:
imslsuperlu.lib(scomplex.obj) : error LNK2001: unresolved external symbol _fprintf
imslsuperlu.lib(zmemory.obj) : error LNK2001: unresolved external symbol ___iob_func
imslsuperlu.lib(sutil.obj) : error LNK2001: unresolved external symbol _sprintf
The situations where this will appear involve use of IMSL routines that are based on the SuperLU library for solvers and linear algebra operators. Static linking is specified by referencing the IMSL INCLUDE files link_fnl_static.h
or link_fnl_static_imsl.h
, or if building from the command line and referencing environment variables LINK_FNL_STATIC
, LINK_FNL_STATIC_HPC
or LINK_FNL_STATIC_IMSL
.
These errors are due to incompatibilities in the Microsoft Visual C++* static libraries introduced with Visual Studio 2015. The workaround is to link to the DLL (shared) form of the IMSL libraries. If using the INCLUDE file method, specify link_fnl_shared.h
or link_fnl_shared_imsl.h
. If linking from the command line, use the environment variables LINK_FNL_SHARED
or LINK_FNL_IMSL
. (The variants without "IMSL" use the Intel® Math Kernel Library to improve performance; those with "IMSL" do not.)
For more information on building applications with Rogue Wave IMSL, see Configuring Visual Studio for using the IMSL Fortran Numerical Library. If you need further assistance, please refer to Intel® Developer Support.