IMSL library: unresolved external

IMSL library: unresolved external

I migrated successfully from Compaq to Intel, but now I'm in trouble migrating an existing program with the use of IMSL, which gives me a linker error that the called subroutine is an unresolved external symbol. The message is:

error LNK2019: unresolved external symbol "_UMACH" in function "_SMAT". SMAT.obj

I followed the instruction in
but no success.

Thanks for any help

13 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Please state which versions of Intel Fortran and IMSL were used, and the version of Windows, in particular 32 or 64 bit, because name decorations vary.

If you state the compilation/linking command lines, that would help. If you use the IDE, instead, there is a long list of options that affect the compilation, and if you set any of them to non-default values, those would be needed to be known, as well.

Did you add the lines:

INCLUDE 'link_fnl_static.h'
!DEC$ OBJCOMMENT LIB:'libiomp5md.lib'

to one of your sources?

Retired 12/31/2016

I use windows 7, 32 bit, Intel Fortran Professional Edition 11.1 with MVS 2008, IMSL 6.0

Here are the compilation/linking command lines taken from the IDE:

/nologo /debug:full /Od /Qsave /iface:cvf /module:"Debug/" /object:"Debug/" /traceback /check:bounds /libs:static /threads /dbglibs /winapp /c

/OUT:"Debug/ra2d.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\Program Files\VNI\imsl\fnl600\IA32\lib" /MANIFEST /MANIFESTFILE:"C:\Users\Raimond\Eigene Programme - Intel\WGV\Debug\ra2d.exe.intermediate.manifest" /DEBUG /PDB:"Debug/ra2d.pdb" /SUBSYSTEM:WINDOWS version.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

Thank you in advance for any further help


See my earlier reply.

Retired 12/31/2016

Steve, I just added the lines, now the IMSL-subroutine Umach is not longer unresolved external but 2 remain: "_DGVCSP@32" and "_DWRRRN@28"


Best Reply

My guess is that you have the calling convention set as CVF and are not USEing NUMERICAL_LIBRARIES in the routine that calls these. Either set the calling convention to Default (Properties > Fortran > External Procedures) or add USE NUMERICAL_LIBRARIES where IMSL routines are called.

Retired 12/31/2016

That problem can be solved by removing the incompatible option "/iface:cvf", as Steve stated.

You are completly right! I used "IMSL_LIBRARIES" instead of "NUMERICAL_LIBRARIES"
Now everything works fine. Thank you so much!

Glad to hear it. IMSL_LIBRARIES is for when you are using the newer "Fortran 90" interfaces to the IMSL routines, though if you do that I recommend using the individual xxx_INT modules instead. If you use these, you have to change your calls to match the documented "Fortran 90" interface. Or, leave your code alone and use NUMERICAL_LIBRARIES.

Retired 12/31/2016

I tried this but is not working. Got the following error
ifort /nologo /debug:full /Od /warn:interfaces /module:"x64\Debug\\" /object:"x64\Debug\\" /Fd"x64\Debug\vc100.pdb" /traceback /check:bounds /libs:static /threads /dbglibs /winapp /4Yportlib /Qmkl:parallel /libdir:noauto /libdir:nouser /c /Qvc10 /Qlocation,link,"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Intel Fortran\Microsoft Files\VC\\bin\amd64" "C:\javier\Dropbox\intel\try.f90"

C:\javier\Dropbox\intel\try.f90(2): error #5102: Cannot open include file 'link_fnl_dll.h'
include 'link_fnl_dll.h'

The references to x64 and amd64 in the compiler invocation indicate that you are attempting to compile a 64-bit application. Earlier you stated that you have a 32-bit version of the IMSL libraries. This discrepancy needs to be resolved.

You need to make sure that you have Visual Studio configured for using IMSL - the compiler can't find the include file. See for the details.

Retired 12/31/2016

Leave a Comment

Please sign in to add a comment. Not a member? Join today