- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Error1 error LNK2019: unresolved external symbol _DGEMV_F95 referenced in function _POLYMULT
[fortran] INCLUDE 'blas.f90' SUBROUTINE POLYMULT(poly1, poly1len, poly2, poly2len, poly3, poly3len) USE mkl95_precision USE BLAS95, ONLY: GEMV IMPLICIT NONE INTEGER, INTENT(IN) :: poly1len, poly2len, poly3len REAL(8), DIMENSION(poly1len), INTENT(IN) :: poly1 REAL(8), DIMENSION(poly2len), INTENT(IN) :: poly2 REAL(8), DIMENSION(poly3len), INTENT(INOUT) :: poly3 REAL(8), DIMENSION(:,:), ALLOCATABLE :: matrixA REAL(8) :: alpha, beta CHARACTER(len = 1) :: trans INTEGER :: i, j, status ALLOCATE(matrixA(poly2len,poly1len+poly2len-1), STAT = status) alpha = 1.0_8 beta = 0.0_8 trans = 'N' matrixA = 0.0_8 FORALL(i = 1: poly2len, j = 1: poly1len) matrixA(j, j+i-1) = poly2(i) CALL GEMV(matrixA, poly1, poly3, alpha, beta, trans) DEALLOCATE(matrixA) RETURN END SUBROUTINE POLYMULT[/fortran]
The c++ version works.
[bash]#include "mkl.h" void i_poly_mult(double* ppoly1, int poly1len, double* ppoly2, int poly2len, double* ppoly3) { MKL_INT incpoly; double alpha, beta; CBLAS_ORDER order; CBLAS_TRANSPOSE trans; order = CblasRowMajor; trans = CblasTrans; alpha = 1.0; beta = 0.0; incpoly = 1; int i,j; int poly3len; poly3len = poly1len + poly2len - 1; double* parray; parray = new double[poly3len * poly1len]; j=0; for(i = 0; i < poly1len -1; i++) { iuni_copy(ppoly2,parray+j,poly2len); j = j + poly2len; iuni_assign(parray+j,0.0,poly1len); j = j + poly1len; } iuni_copy(ppoly2,parray+j,poly2len); // call mkl cblas_dgemv(order, trans, poly1len, poly3len, alpha, parray, poly3len, ppoly1, incpoly, beta, ppoly3, incpoly); delete [] parray; parray = 0; }[/bash]
I must have something configured wrong but what? Fortran has no problem linking with other MKL functions.
I'm stumpt. Please help.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You probably did not add the appropriate library to your Fortran build.
That the C++ version "worked" whereas the F95 version "failed" amounts to nothing, as there is no parity between the two builds.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
My settings in Configuration Properties -> Fortran -> Libraries :
RunTime Library -> Debug Multithreaded (/libs:static /threads /dbglibs)
Use Common Windows Library -> No
Use Portlib Library -> No
Use Intel Math Kernel Library -> Sequential(/Qmkl:sequential)
Disable Default Library Search Rules -> No
Disable OBJCOMMENT Library Names in Object -> No
According to the fortran users manual, the above is all that is required to use the MKL library.
The MKLusers manualis a bit dfferent. It states that under Project-> Properties -> Linker -> General -> Additional Library Directories " Add the architecture specific lib folder."
and under Project-> Properties -> Linker -> Input -> Additional Dependicies
"Insertmkl_intel_c.lib mkl_intel_thread.lib mkl_core.lib libiomp5md.lib"
Fortran does not have a path Project-> Properties -> Linker -> General so I assume it means Configuration Properties -> Librarian -> General
Here the settings I've tried are: ( with and without Use Intel Math Kernel Library -> Sequential(/Qmkl:sequential) )
Output File -> $(OutDir)/$(ProjectName).libAdditional Dependencies -> mkl_intel_c.lib mkl_intel_thread.lib mkl_core.lib libiomp5md.lib
Additional Library Directories -> C:\Program Files\Intel\Compiler\11.1\067\mkl\ia32\libSuppress Startup Banner -> Yes(/NOLOGO)
Model Definition File Name -> empty
Ignore All Default Libraries -> No
Ignore Specific Library -> empty
Export Named Functions -> empty
Force Symbol Reference -> empty
Link Library Dependencies -> Yes
The above settings make no changes to the error, but they do increase compile time as the library has to be rebuilt at each compile. There is also a large warning list for second definitions.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The user's manual lies in the table on page 5 - 5. The library mkl_blas95.lib is not in the library mkl_core.lib.
If I set
Use Intel Math Kernel Library -> Sequential(/Qmkl:sequential)
Additional Dependencies -> mkl_blas95.lib
Additional Library Directories -> C:\Program Files\Intel\Compiler\11.1\067\mkl\ia32
It links!!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page