<?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 Re: Linking to MKL DLL : unresolved symbols in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Linking-to-MKL-DLL-unresolved-symbols/m-p/927828#M13481</link>
    <description>&lt;DIV&gt;Thanks for the underwhelming response. I will just have to submit issue with Intel.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Again, thanks so much for the underwhelming response Intel.&lt;/DIV&gt;</description>
    <pubDate>Sat, 20 Nov 2004 02:32:33 GMT</pubDate>
    <dc:creator>blamm</dc:creator>
    <dc:date>2004-11-20T02:32:33Z</dc:date>
    <item>
      <title>Linking to MKL DLL : unresolved symbols</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Linking-to-MKL-DLL-unresolved-symbols/m-p/927827#M13480</link>
      <description>&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;I'm trying to link to the DLL versions of MKL when building my exe. My exe also uses pardiso, so I statically link to mkl_solver.lib, and, per the techinical user notes, I also statically link to mkl_c.lib since mkl_solver.lib references symbols defined in mkl_c.lib. So, currently I'm stuck having to use static linking to mkl_solver.lib since there is no DLL library for using pardiso.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;I also, and this is the problem, want to use the DLL versions of BLAS found in MKL 7.0.1 (w_mkl_u_7.0.1.007). &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;So I put the additional dependency of mkl_c_dll.lib in Project|Properties|Linker|Input..Additional Dependencies. I have the Fortran|External Procedures..Calling Convention set to default (when I set it to C, REFERENCE then I get unresolved symbol _pardiso in a procedure that does not even directly or indirectly reference pardiso!).&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;I have defined in my source (single file) the DLLIMPORT property of the required BLAS procedures thus&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;!&lt;BR /&gt; MODULE mod_BLAS_real_int&lt;BR /&gt;!&lt;BR /&gt; PUBLIC&lt;BR /&gt;!&lt;BR /&gt;! import BLAS through Intel MKL DLLs in mkl_c_dll.lib ( IVF-specific )&lt;BR /&gt;!&lt;BR /&gt;!&lt;BR /&gt; INTERFACE&lt;BR /&gt;!&lt;BR /&gt; REAL(KIND(1.0D0)) PURE FUNCTION DDOT ( n, dx, incx, dy, incy )&lt;BR /&gt; !DEC$ ATTRIBUTES DLLIMPORT :: DDOT&lt;BR /&gt; REAL(KIND(1.0D0)), INTENT(IN) :: dx(*), dy(*)&lt;BR /&gt; INTEGER, INTENT(IN) :: incx, incy, n&lt;BR /&gt; END FUNCTION DDOT&lt;BR /&gt;!&lt;BR /&gt; SUBROUTINE DGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX, &amp;amp;&lt;BR /&gt; BETA, Y, INCY )&lt;BR /&gt; !DEC$ ATTRIBUTES DLLIMPORT :: DGEMV&lt;BR /&gt; REAL(KIND(1.0D0)), INTENT(IN) :: ALPHA, BETA&lt;BR /&gt; INTEGER, INTENT(IN) :: INCX, INCY, LDA, M, N&lt;BR /&gt; CHARACTER(1), INTENT(IN) :: TRANS&lt;BR /&gt; REAL(KIND(1.0D0)), INTENT(IN) :: A( LDA, * ), X( * )&lt;BR /&gt; REAL(KIND(1.0D0)), INTENT(INOUT) :: Y( * )&lt;BR /&gt; END SUBROUTINE DGEMV&lt;BR /&gt;!&lt;BR /&gt; REAL(KIND(1.0D0)) PURE FUNCTION DNRM2 ( N, X, INCX )&lt;BR /&gt; !DEC$ ATTRIBUTES DLLIMPORT :: DNRM2&lt;BR /&gt; INTEGER, INTENT(IN) :: INCX, N&lt;BR /&gt; REAL(KIND(1.0D0)), INTENT(IN) :: X( * )&lt;BR /&gt; END FUNCTION DNRM2&lt;BR /&gt;!&lt;BR /&gt; REAL(KIND(1.0)) PURE FUNCTION SNRM2 ( n, x, incx )&lt;BR /&gt; !DEC$ ATTRIBUTES DLLIMPORT :: SNRM2&lt;BR /&gt; REAL(KIND(1.0)), INTENT(IN) :: x(*)&lt;BR /&gt; INTEGER, INTENT(IN) :: n, incx&lt;BR /&gt; END FUNCTION SNRM2&lt;BR /&gt;!&lt;BR /&gt; END INTERFACE&lt;BR /&gt;!&lt;BR /&gt;!-------------------------------------------------------------------------------------------------------&lt;BR /&gt;!&lt;BR /&gt; END MODULE mod_BLAS_real_int&lt;BR /&gt;!&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;The compile builds fine, but I get the following linker errors:&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Linking...&lt;BR /&gt;Link /OUT:"Release/LoTekFEA.exe" /INCREMENTAL:NO /LIBPATH:"F:Program FilesIntelMKL701ia32lib" /SUBSYSTEM:CONSOLE mkl_c_dll.lib Release/LoTekFEAfa.obj "F:Program FilesIntelMKL701ia32libmkl
_solver.lib" "F:Program FilesIntelMKL701ia32libmkl_c.lib"&lt;BR /&gt;IPO Error: unresolved : __imp__DNRM2&lt;BR /&gt; Referenced in Release/LoTekFEAfa.obj&lt;BR /&gt;IPO Error: unresolved : __imp__DDOT&lt;BR /&gt; Referenced in Release/LoTekFEAfa.obj&lt;BR /&gt;IPO Error: unresolved : __imp__SNRM2&lt;BR /&gt; Referenced in Release/LoTekFEAfa.obj&lt;BR /&gt;Release/LoTekFEAfa.obj:warning : locally defined symbol __imp__DGEMV imported&lt;BR /&gt;Link: executing 'link'&lt;BR /&gt;Microsoft  Incremental Linker Version 7.10.3077&lt;BR /&gt;Copyright (C) Microsoft Corporation. All rights reserved.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;/OUT:Release/LoTekFEA.exe &lt;BR /&gt;/INCREMENTAL:NO &lt;BR /&gt;"/LIBPATH:F:Program FilesIntelMKL701ia32lib" &lt;BR /&gt;/SUBSYSTEM:CONSOLE &lt;BR /&gt;mkl_c_dll.lib &lt;BR /&gt;Release/LoTekFEAfa.obj &lt;BR /&gt;"F:Program FilesIntelMKL701ia32libmkl_solver.lib" &lt;BR /&gt;"F:Program FilesIntelMKL701ia32libmkl_c.lib" &lt;BR /&gt;LoTekFEAfa.obj : warning LNK4217: locally defined symbol _DGEMV imported in function _MOD_ITERATIVE_SOLVERS_EX_mp_GMRESR.J&lt;BR /&gt;LoTekFEAfa.obj : error LNK2019: unresolved external symbol __imp__DNRM2 referenced in function _MOD_FORM_EL_M_LIN_EX_mp_FORM_EL_M_LIN.J&lt;BR /&gt;LoTekFEAfa.obj : error LNK2019: unresolved external symbol __imp__DDOT referenced in function _MOD_ITERATIVE_SOLVERS_EX_mp_BICGSTAB.J&lt;BR /&gt;LoTekFEAfa.obj : error LNK2019: unresolved external symbol __imp__SNRM2 referenced in function _MOD_UTIL_EX_mp_VEC_NORM_V_S.J&lt;BR /&gt;Release/LoTekFEA.exe : fatal error LNK1120: 3 unresolved externals&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;&lt;FONT face="Courier New" size="2"&gt;LoTekFEA build failed.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;I'm using /Ob2 /QaxN for optimization (default /O2).&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Now, for example, "DNRM2"is referenced in several more places than just in FORM_EL_M_LIN, so why not multiple linker errors for the other many referecnces to DNRM2? In fact DNRM2 is not even directly referenced in FORM_EL_M_LIN, the reference is indirect because FORM_EL_M_LIN refernces an overloaded module procedure "vec_norm"&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;!&lt;BR /&gt; MODULE mod_util_ex&lt;BR /&gt; USE mod_ircl_intrinsic_types&lt;BR /&gt; PRIVATE&lt;BR /&gt; PUBLIC :: max_elem_nodes, &amp;amp;&lt;BR /&gt; min_elem_nodes, &amp;amp;&lt;BR /&gt; g_dof_per_node, &amp;amp;&lt;BR /&gt; el_dof_per_node, &amp;amp;&lt;BR /&gt; elem_dim, &amp;amp;&lt;BR /&gt; shell_name, &amp;amp;&lt;BR /&gt; beam_name, &amp;amp;&lt;BR /&gt; determinant, &amp;amp;&lt;BR /&gt; inv_det_23mat, &amp;amp;&lt;BR /&gt; inv_det_mat23, &amp;amp;&lt;BR /&gt; nat_nod_ord, &amp;amp;&lt;BR /&gt; nod_rst_cord, &amp;amp;&lt;BR /&gt; &lt;STRONG&gt;vec_norm&lt;/STRONG&gt;, &amp;amp;&lt;BR /&gt; error_trap, &amp;amp;&lt;BR /&gt; augment, &amp;amp;&lt;BR /&gt; OPERATOR(.cross.), &amp;amp;&lt;BR /&gt; OPERATOR(.equals.), &amp;amp;&lt;BR /&gt; Form_csTrcs, &amp;amp;&lt;BR /&gt; iocs_cords, &amp;amp;&lt;BR /&gt; spline&lt;BR /&gt;!&lt;BR /&gt; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size="2"&gt;&lt;STRONG&gt;INTERFACE vec_norm&lt;BR /&gt; MODULE PROCEDURE vec_norm_v_s, vec_norm_cm_s, &amp;amp;&lt;BR /&gt; vec_norm_v_d, vec_norm_cm_d&lt;BR /&gt; END INTERFACE vec_norm&lt;/STRONG&gt;&lt;BR /&gt;!&lt;BR /&gt; INTERFACE OPERAT
OR(.cross.)&lt;BR /&gt; MODULE PROCEDURE vcrossw_s, vcrossw_d&lt;BR /&gt; END INTERFACE OPERATOR(.cross.)&lt;BR /&gt;!&lt;BR /&gt; INTERFACE OPERATOR(.equals.)&lt;BR /&gt; MODULE PROCEDURE equals_sgl, equals_dbl&lt;BR /&gt; END INTERFACE OPERATOR(.equals.)&lt;BR /&gt;!&lt;BR /&gt; CONTAINS&lt;BR /&gt;!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;....&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt; PURE FUNCTION vec_norm_v_s( vec )&lt;BR /&gt; USE mod_BLAS_real_int, ONLY : SNRM2&lt;BR /&gt;! SNRM2 ( n, x, incx )&lt;BR /&gt; IMPLICIT NONE&lt;BR /&gt; REAL(SP), INTENT(IN) :: vec(:)&lt;BR /&gt; REAL(SP) :: vec_norm_v_s&lt;BR /&gt; vec_norm_v_s = SNRM2( SIZE(vec), vec, 1 )&lt;BR /&gt; END FUNCTION vec_norm_v_s&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt; PURE FUNCTION vec_norm_cm_s( arrofvec )&lt;BR /&gt; USE mod_BLAS_real_int, ONLY : SNRM2&lt;BR /&gt; IMPLICIT NONE&lt;BR /&gt; REAL(SP), INTENT(IN) :: arrofvec(:,:)&lt;BR /&gt; REAL(SP) :: vec_norm_cm_s(SIZE(arrofvec,2))&lt;BR /&gt;!&lt;BR /&gt; INTEGER :: n, a&lt;BR /&gt;!&lt;BR /&gt; n = SIZE(arrofvec,1)&lt;BR /&gt; DO a = 1, SIZE(arrofvec,2)&lt;BR /&gt; vec_norm_cm_s(a) = SNRM2( n, arrofvec(:,a), 1 )&lt;BR /&gt; END DO&lt;BR /&gt; END FUNCTION vec_norm_cm_s&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt; PURE FUNCTION vec_norm_v_d( vec )&lt;BR /&gt; USE mod_BLAS_real_int, ONLY : DNRM2&lt;BR /&gt;! DNRM2 ( n, x, incx )&lt;BR /&gt; IMPLICIT NONE&lt;BR /&gt; REAL(DP), INTENT(IN) :: vec(:)&lt;BR /&gt; REAL(DP) :: vec_norm_v_d&lt;BR /&gt; vec_norm_v_d = DNRM2( SIZE(vec), vec, 1 )&lt;BR /&gt; END FUNCTION vec_norm_v_d&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt;!------------------------------------------------------------------------------------------------&lt;BR /&gt; PURE FUNCTION vec_norm_cm_d( arrofvec )&lt;BR /&gt; USE mod_BLAS_real_int, ONLY : DNRM2&lt;BR /&gt; IMPLICIT NONE&lt;BR /&gt; REAL(DP), INTENT(IN) :: arrofvec(:,:)&lt;BR /&gt; REAL(DP) :: vec_norm_cm_d(SIZE(arrofvec,2))&lt;BR /&gt;!&lt;BR /&gt; INTEGER :: n, a&lt;BR /&gt;!&lt;BR /&gt; n = SIZE(arrofvec,1)&lt;BR /&gt; DO a = 1, SIZE(arrofvec,2)&lt;BR /&gt; vec_norm_cm_d(a) = DNRM2( n, arrofvec(:,a), 1 )&lt;BR /&gt; END DO&lt;BR /&gt; END FUNCTION vec_norm_cm_d&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;...&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;and even "vec_norm" is referenced in many, many places throughout the source file.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Are the linker errors (seemingly inconsistent IMHO) a result of improper or incomplete specification of, for example&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;!DEC$ ATTRIBUTES DLLIMPORT :: DNRM2&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;in "DNRM2"s interface?&lt;/FONT&gt;
&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Additionally, what's with the linker warning regarding the reference of "DGEMV"?&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;I will close with the observation that when I remove the DLLIMPORT properties and statically link to the mkl_c.lib for Everything that references Intel MKL that the build succeeds and the program yields correct results from an extensive suite of tests.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Brian Earl Lamm&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 15 Nov 2004 07:07:16 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Linking-to-MKL-DLL-unresolved-symbols/m-p/927827#M13480</guid>
      <dc:creator>blamm</dc:creator>
      <dc:date>2004-11-15T07:07:16Z</dc:date>
    </item>
    <item>
      <title>Re: Linking to MKL DLL : unresolved symbols</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Linking-to-MKL-DLL-unresolved-symbols/m-p/927828#M13481</link>
      <description>&lt;DIV&gt;Thanks for the underwhelming response. I will just have to submit issue with Intel.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Again, thanks so much for the underwhelming response Intel.&lt;/DIV&gt;</description>
      <pubDate>Sat, 20 Nov 2004 02:32:33 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Linking-to-MKL-DLL-unresolved-symbols/m-p/927828#M13481</guid>
      <dc:creator>blamm</dc:creator>
      <dc:date>2004-11-20T02:32:33Z</dc:date>
    </item>
  </channel>
</rss>

