Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Issue with running MKL sample code

Tian__Will
Beginner
663 Views

I was trying to run MKL sample code with VS2019 and encounter a Linking error.

LNK2019: unresolved external symbol _DASUM_F95 referenced in function _MAIN__ 1.obj Error fatal error

LNK1120: 1 unresolved externals Debug\Console1.exe

I think the "program" is well defined. It seems to be related to MKL.  If I comment out  "use f95_precision, only: wp => dp use blas95, only: asum"  and other statements related to MKLit will compile. So please help me to solve it. Thx!

 

 

      program DASUM_MAIN

      use f95_precision, only: wp => dp
      use blas95, only: asum

      implicit none

      integer :: n
      integer :: incx
      integer :: nx, nx1, nx2
      real(wp), allocatable :: x(:)
      real(wp) :: sum
      integer :: i

!     Intrinsic Functions
      intrinsic abs
!     External Subroutines
      external PrintVectorD

!     Executable Statements

      print*
      print*,'   D A S U M  EXAMPLE PROGRAM'
!     Read input data from input file
      read*
      read*, n, incx

      nx = 1+(n-1)*abs(incx)

      allocate(x(n))
      read*, (x(i),i=1,nx)

!     Print input data
      print*
      print*, '     INPUT DATA'
      print 100, n
      call PrintVectorD(0,n,x,incx,'X ')

!     Call DASUM subroutine
      if (incx > 0) then
          nx1 = 1
          nx2 = nx
      else
          nx1 = nx
          nx2 = 1
      end if
      sum = ASUM(x(nx1:nx2:incx))

      print*
      print*, '     OUTPUT DATA'
      print 101, sum

      deallocate(x)

 100  format(7x,'N=',i2)
 101  format(10x,'DASUM = ',f8.3)
      stop
      end

 

0 Kudos
7 Replies
mecej4
Honored Contributor III
663 Views

When you build code that uses BLAS95 routines, you have to tell the linker to look up the BLAS95 library at link time. Similarly, you have to compile the utility file common_func.f and link the resulting OBJ file.

For example, to compile for X64 using 32-bit integer arguments to MKL routines, the command to compile and link is

ifort /Qmkl dasumx.f90 common_func.f mkl_blas95_lp64.lib

 

0 Kudos
Tian__Will
Beginner
663 Views

Hi mecej4, thanks for the reply. I am really new here, so please forgive me if my question looks stupid. Where to input this command line?

I tried to figure out myself, but it does not work.  

 

And it gave me these two errors.


Warning        warning #10006: ignoring unknown option '/Qmkl'        Link        
Error        fatal error LNK1181: cannot open input file 'ifort.obj'        LINK        
 

0 Kudos
mecej4
Honored Contributor III
663 Views

Open an Intel Parallel Studio command window from the Windows Start Menu, change to your working directory, and enter the command there. If you are going to build for Win32, the library name should be mkl_blas95.lib.

If you must use Visual Studio, instead, you will need to read the documentation and look for tutorials relevant to building a Fortran application that uses MKL routines.

0 Kudos
JohnNichols
Valued Contributor III
663 Views

Dear Will:

Seeing as you are new, I will offer some free advice.  

When Great Pumpkin came down to the patch there were 11 commandments only the Pumpkin dropped the stone and the 11th broke off, but it read.

Just do what mecej4 says.  

I realize this is humour and some people may not be into Charlie Brown, but what the heck.

To get a command window look under the Intel Folder on the Start menu.  

Of course there is the age old question, if there was a head to head Fortran competition between mecej4 and Dr Fortran and Jim Dempsey who would win?

The Great Pumpkin may reveal that to Linus one day - up until then we mere mortals and may merely look on in awe. 

Have a nice day 

John

 

0 Kudos
Tian__Will
Beginner
663 Views

Hi mecej4,

Thanks for the reply. I think I have figured out how to compile it with CMD.

But I really need to do it in visual studio as I am working on a big project which needs the MKL library to solve for system of nonlinear equations.  I found a tutorial by

https://software.intel.com/content/www/us/en/develop/articles/intel-math-kernel-library-intel-mkl-compiling-and-linking-with-microsoft-visual-cc.html#automatic

It seems to be just a single click, but it does not work. 

But after I manually add the mkl_blas95.lib to the resource files, it works! 

 

mecej4 (Blackbelt) wrote:

Open an Intel Parallel Studio command window from the Windows Start Menu, change to your working directory, and enter the command there. If you are going to build for Win32, the library name should be mkl_blas95.lib.

If you must use Visual Studio, instead, you will need to read the documentation and look for tutorials relevant to building a Fortran application that uses MKL routines.

0 Kudos
JohnNichols
Valued Contributor III
663 Views

Look through the recent mecej4 posts here and on the MKL Forum -- he has addressed this issue in the last two months. 

Do exactly what he says.  

If you click his name you will be led to all his posts -- you will need to hunt or do a search on BLAS etc... 

 

0 Kudos
Steve_Lionel
Honored Contributor III
663 Views

Do also note that this is the Intel Fortran forum, not the MKL forum. MKL has its own forum here - questions about linking to MKL or issues calling MKL should be asked in the MKL forum.

0 Kudos
Reply