<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic error LNK2019: unresolved external symbol DGETRF_MKL95 referenced in function SUPORTBASE_mp_INVMAT in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026983#M19953</link>
    <description>&lt;P&gt;I inherited some project done in Fortran 95. &lt;STRONG&gt;After upgrade from Intel Fotran Composer v2013 to v2016&lt;/STRONG&gt;, I am receiving errors during linking:&lt;/P&gt;

&lt;P&gt;1&amp;gt;suportbase.obj : error LNK2019: unresolved external symbol DGETRF_MKL95 referenced in function SUPORTBASE_mp_INVMAT&lt;/P&gt;

&lt;P&gt;1&amp;gt;suportbase.obj : error LNK2019: unresolved external symbol DGETRI_MKL95 referenced in function SUPORTBASE_mp_INVMAT&lt;/P&gt;

&lt;P&gt;...fatal error LNK1120: 2 unresolved externals&lt;/P&gt;

&lt;P&gt;The code which cause the problem:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;pure function invmat(a) result(b)
USE usedlapck95_mod, ONLY: getrf,getri
USE, INTRINSIC :: IEEE_ARITHMETIC
implicit none


    real(8),intent(in),dimension(:,:) :: a
    real(8),dimension(size(a,1),size(a,1)) :: b


    integer(4),dimension(size(a,1)) :: ipiv
    integer(4) :: info

    b=a

    if (size(a,1)==0) return

    call getrf(b,ipiv,info)

    call getri(b,ipiv,info)

    if (info&amp;gt;0) b=IEEE_VALUE (b,IEEE_POSITIVE_INF)


end function&lt;/PRE&gt;

&lt;P&gt;The code produce inverse matrix and it uses MKL library rutines.&lt;/P&gt;

&lt;P&gt;The module which is called is:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;MODULE F95_PRECISION
    INTEGER, PARAMETER :: SP = KIND(1.0E0)
    INTEGER, PARAMETER :: DP = KIND(1.0D0)
END MODULE F95_PRECISION

MODULE usedlapck95_mod

INTERFACE GETRF
    PURE SUBROUTINE SGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! SGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE SGETRF_MKL95
    PURE SUBROUTINE DGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! DGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE DGETRF_MKL95
    PURE SUBROUTINE CGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! CGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE CGETRF_MKL95
    PURE SUBROUTINE ZGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! ZGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE ZGETRF_MKL95
END INTERFACE GETRF

INTERFACE GETRI
    PURE SUBROUTINE SGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! SGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE SGETRI_MKL95
    PURE SUBROUTINE DGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! DGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE DGETRI_MKL95
    PURE SUBROUTINE CGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! CGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE CGETRI_MKL95
    PURE SUBROUTINE ZGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! ZGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE ZGETRI_MKL95
END INTERFACE GETRI

INTERFACE SYEVD
        ! JOBZ='N','V'; default: 'N'
        ! UPLO='U','L'; default: 'U'
    PURE SUBROUTINE SSYEVD_F95(A,W,JOBZ,UPLO,INFO)
        ! Fortran77 call:
        ! SSYEVD(JOBZ,UPLO,N,A,LDA,W,WORK,LWORK,IWORK,LIWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: JOBZ
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        REAL(WP), INTENT(OUT) :: W(:)
    END SUBROUTINE SSYEVD_F95
    PURE SUBROUTINE DSYEVD_F95(A,W,JOBZ,UPLO,INFO)
        ! Fortran77 call:
        ! DSYEVD(JOBZ,UPLO,N,A,LDA,W,WORK,LWORK,IWORK,LIWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: JOBZ
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        REAL(WP), INTENT(OUT) :: W(:)
    END SUBROUTINE DSYEVD_F95
END INTERFACE SYEVD

end module&lt;/PRE&gt;

&lt;P&gt;Does anybody has an idea how to fix the problem with linker? I have "light" experience with Fortran so far, my colleagues do but they don't have any idea too.&lt;/P&gt;

&lt;P&gt;Thank!&lt;/P&gt;</description>
    <pubDate>Wed, 21 Oct 2015 08:51:40 GMT</pubDate>
    <dc:creator>Radek_Z_</dc:creator>
    <dc:date>2015-10-21T08:51:40Z</dc:date>
    <item>
      <title>error LNK2019: unresolved external symbol DGETRF_MKL95 referenced in function SUPORTBASE_mp_INVMAT</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026983#M19953</link>
      <description>&lt;P&gt;I inherited some project done in Fortran 95. &lt;STRONG&gt;After upgrade from Intel Fotran Composer v2013 to v2016&lt;/STRONG&gt;, I am receiving errors during linking:&lt;/P&gt;

&lt;P&gt;1&amp;gt;suportbase.obj : error LNK2019: unresolved external symbol DGETRF_MKL95 referenced in function SUPORTBASE_mp_INVMAT&lt;/P&gt;

&lt;P&gt;1&amp;gt;suportbase.obj : error LNK2019: unresolved external symbol DGETRI_MKL95 referenced in function SUPORTBASE_mp_INVMAT&lt;/P&gt;

&lt;P&gt;...fatal error LNK1120: 2 unresolved externals&lt;/P&gt;

&lt;P&gt;The code which cause the problem:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;pure function invmat(a) result(b)
USE usedlapck95_mod, ONLY: getrf,getri
USE, INTRINSIC :: IEEE_ARITHMETIC
implicit none


    real(8),intent(in),dimension(:,:) :: a
    real(8),dimension(size(a,1),size(a,1)) :: b


    integer(4),dimension(size(a,1)) :: ipiv
    integer(4) :: info

    b=a

    if (size(a,1)==0) return

    call getrf(b,ipiv,info)

    call getri(b,ipiv,info)

    if (info&amp;gt;0) b=IEEE_VALUE (b,IEEE_POSITIVE_INF)


end function&lt;/PRE&gt;

&lt;P&gt;The code produce inverse matrix and it uses MKL library rutines.&lt;/P&gt;

&lt;P&gt;The module which is called is:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;MODULE F95_PRECISION
    INTEGER, PARAMETER :: SP = KIND(1.0E0)
    INTEGER, PARAMETER :: DP = KIND(1.0D0)
END MODULE F95_PRECISION

MODULE usedlapck95_mod

INTERFACE GETRF
    PURE SUBROUTINE SGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! SGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE SGETRF_MKL95
    PURE SUBROUTINE DGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! DGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE DGETRF_MKL95
    PURE SUBROUTINE CGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! CGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE CGETRF_MKL95
    PURE SUBROUTINE ZGETRF_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! ZGETRF(M,N,A,LDA,IPIV,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(OUT), OPTIONAL, TARGET :: IPIV(:)
    END SUBROUTINE ZGETRF_MKL95
END INTERFACE GETRF

INTERFACE GETRI
    PURE SUBROUTINE SGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! SGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE SGETRI_MKL95
    PURE SUBROUTINE DGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! DGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE DGETRI_MKL95
    PURE SUBROUTINE CGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! CGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE CGETRI_MKL95
    PURE SUBROUTINE ZGETRI_MKL95(A,IPIV,INFO)
        ! MKL Fortran77 call:
        ! ZGETRI(N,A,LDA,IPIV,WORK,LWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        COMPLEX(WP), INTENT(INOUT) :: A(:,:)
        INTEGER, INTENT(IN) :: IPIV(:)
    END SUBROUTINE ZGETRI_MKL95
END INTERFACE GETRI

INTERFACE SYEVD
        ! JOBZ='N','V'; default: 'N'
        ! UPLO='U','L'; default: 'U'
    PURE SUBROUTINE SSYEVD_F95(A,W,JOBZ,UPLO,INFO)
        ! Fortran77 call:
        ! SSYEVD(JOBZ,UPLO,N,A,LDA,W,WORK,LWORK,IWORK,LIWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; SP
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: JOBZ
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        REAL(WP), INTENT(OUT) :: W(:)
    END SUBROUTINE SSYEVD_F95
    PURE SUBROUTINE DSYEVD_F95(A,W,JOBZ,UPLO,INFO)
        ! Fortran77 call:
        ! DSYEVD(JOBZ,UPLO,N,A,LDA,W,WORK,LWORK,IWORK,LIWORK,INFO)
        USE F95_PRECISION, ONLY: WP =&amp;gt; DP
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: JOBZ
        CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO
        INTEGER, INTENT(OUT), OPTIONAL :: INFO
        REAL(WP), INTENT(INOUT) :: A(:,:)
        REAL(WP), INTENT(OUT) :: W(:)
    END SUBROUTINE DSYEVD_F95
END INTERFACE SYEVD

end module&lt;/PRE&gt;

&lt;P&gt;Does anybody has an idea how to fix the problem with linker? I have "light" experience with Fortran so far, my colleagues do but they don't have any idea too.&lt;/P&gt;

&lt;P&gt;Thank!&lt;/P&gt;</description>
      <pubDate>Wed, 21 Oct 2015 08:51:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026983#M19953</guid>
      <dc:creator>Radek_Z_</dc:creator>
      <dc:date>2015-10-21T08:51:40Z</dc:date>
    </item>
    <item>
      <title>Some module and library names</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026984#M19954</link>
      <description>&lt;P&gt;Some module and library names were changed in recent versions of MKL. What you need with IFort 16 is&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      USE f95_precision, ONLY: WP =&amp;gt; DP
      USE lapack95, ONLY: GETRF, GETRI&lt;/PRE&gt;

&lt;P&gt;in the subprogram source from which GETRF and GETRI are called, and you need to add the appropriate Lapack95 library to the linker line. The library file to use is&amp;nbsp;mkl_lapack95.lib for 32-bit targets, and&amp;nbsp;mkl_lapack95_lp64.lib&lt;SPAN style="font-size: 13.008px; line-height: 13.008px;"&gt;&amp;nbsp;(if passing 4-byte integer arguments)&lt;/SPAN&gt; or&amp;nbsp;mkl_lapack95_ilp64.lib (if passing 8-byte integer arguments) for 64-bit targets.&lt;/P&gt;

&lt;P&gt;There is no need to use your own module source (usedlapck95_mod).&lt;/P&gt;</description>
      <pubDate>Wed, 21 Oct 2015 15:25:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026984#M19954</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2015-10-21T15:25:00Z</dc:date>
    </item>
    <item>
      <title>Thank you! That solved my</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026985#M19955</link>
      <description>&lt;P&gt;Thank you! That solved my problem! :-)&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 21 Oct 2015 15:51:37 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/error-LNK2019-unresolved-external-symbol-DGETRF-MKL95-referenced/m-p/1026985#M19955</guid>
      <dc:creator>Radek_Z_</dc:creator>
      <dc:date>2015-10-21T15:51:37Z</dc:date>
    </item>
  </channel>
</rss>

