&引用;找不到模块";将MATLAB mex与Fortran和intel mkl结合使用

&引用;找不到模块";将MATLAB mex与Fortran和intel mkl结合使用,matlab,visual-studio-2013,fortran,mex,intel-mkl,Matlab,Visual Studio 2013,Fortran,Mex,Intel Mkl,我正在尝试执行一个用Fortran编写的MATLAB mex函数,该函数使用英特尔MKL,并具有以下设置(per): Matlab2015b,Win64 Visual Studio专业版2013 英特尔Visual Fortran Composer XE 2013 SP1 Rogue Wave IMSL*Fortran数字库7.0.1 到目前为止,一切都已成功编译,例如 mex -v Fsolution.f90 COMPFLAGS="/Qopenmp $COMPFLAGS" ... -I"C:\

我正在尝试执行一个用Fortran编写的MATLAB mex函数,该函数使用英特尔MKL,并具有以下设置(per):

  • Matlab2015b,Win64
  • Visual Studio专业版2013
  • 英特尔Visual Fortran Composer XE 2013 SP1
  • Rogue Wave IMSL*Fortran数字库7.0.1
  • 到目前为止,一切都已成功编译,例如

    mex -v Fsolution.f90 COMPFLAGS="/Qopenmp $COMPFLAGS" ...
    -I"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\redist\intel64\mkl" ...
    -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"
    
    屈服

    ... Looking for compiler 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2013' ...
    ... Looking for environment variable 'IFORT_COMPILER14' ...Yes ('C:\Program Files (x86)\Intel\Composer XE 2013 SP1\').
    ... Looking for file 'C:\Program Files (x86)\Intel\Composer XE 2013 SP1\/Bin/intel64/ifort.exe' ...Yes.
    ... Looking for folder 'C:\Program Files (x86)\Intel\Composer XE 2013 SP1\' ...Yes.
    ... Looking for registry setting 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 12.0 ...No.
    ... Looking for registry setting 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 12.0 ...No.
    ... Looking for registry setting 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 12.0 ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio 12.0\').
    ... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe' ...Yes.
    ... Looking for folder 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC' ...Yes.
    ... Looking for registry setting 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder ...No.
    ... Looking for registry setting 'HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder ...No.
    ... Looking for registry setting 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1' InstallationFolder ...Yes ('C:\Program Files (x86)\Windows Kits\8.1\').
    Found installed compiler 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2013'.
    Set PATH = C:\Program Files (x86)\Intel\Composer XE 2013 SP1\\bin\intel64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\..\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\..\Common7\Tools;C:\Program Files (x86)\Windows Kits\8.1\\bin\x64;C:\Program Files (x86)\Windows Kits\8.1\\Bin\x86;;C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\lib;C:\Program Files (x86)\VNI\imsl\fnl701\IA32\lib;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\mpirt;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\ia32\mpirt;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\ia32\compiler;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\MATLAB\R2015b\runtime\win64;C:\Program Files\MATLAB\R2015b\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Skype\Phone\
    Set INCLUDE = C:\Program Files (x86)\Intel\Composer XE 2013 SP1\\include;C:\Program Files (x86)\Intel\Composer XE 2013 SP1\\compiler\include;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.1\\include\shared;C:\Program Files (x86)\Windows Kits\8.1\\include\um;C:\Program Files (x86)\Windows Kits\8.1\\include\winrt;C:\Program Files\MATLAB\R2015b\extern\include;;
    Set LIB = C:\Program Files (x86)\Intel\Composer XE 2013 SP1\\lib\intel64;C:\Program Files (x86)\Intel\Composer XE 2013 SP1\\compiler\lib\intel64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Lib\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\Lib\amd64;C:\Program Files (x86)\Windows Kits\8.1\\lib\winv6.3\um\x64;C:\Program Files\MATLAB\R2015b\lib\win64;
    Set LIBPATH = C:\Program Files (x86)\Intel\Composer XE 2013 SP1\\compiler\Lib\Intel64;C:\Program Files (x86)\Windows Kits\8.1\\LIB\x64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\LIB\amd64;C:\Program Files\MATLAB\R2015b\extern\lib\win64;;
    Options file details
    -------------------------------------------------------------------
        Compiler location: C:\Program Files (x86)\Intel\Composer XE 2013 SP1\
        Options file: C:\Users\Marx\AppData\Roaming\MathWorks\MATLAB\R2015b\mex_FORTRAN_win64.xml
        CMDLINE100 : ifort /c /Qopenmp /nologo /fpp /Qprec /MD /fp:source /assume:bscc -I"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\redist\intel64\mkl" -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"  -I"C:\Program Files\MATLAB\R2015b\extern\include"  /DMX_COMPAT_32   /DMATLAB_MEX_FILE /O2 /DNDEBUG "C:\Users\Marx\Dropbox\PRT Uncertainty\Code\Revised Manuscript\Habit-fixme-test\Fsolution.f90" /FoC:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.obj
        CMDLINE200 : link  /nologo /manifest /INCREMENTAL:NO /DLL   /EXPORT:MEXFUNCTION C:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.obj  /LIBPATH:"C:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.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 /out:Fsolution.mexw64
        CMDLINE250 : mt -outputresource:Fsolution.mexw64;2 -manifest Fsolution.mexw64.manifest
        CMDLINE300 : del Fsolution.exp Fsolution.lib Fsolution.mexw64.manifest Fsolution.ilk
        COMPILER : ifort
        COMPFLAGS : /Qopenmp /nologo /fpp /Qprec /MD /fp:source /assume:bscc -I"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\redist\intel64\mkl" -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"  -I"C:\Program Files\MATLAB\R2015b\extern\include"  /DMX_COMPAT_32   /DMATLAB_MEX_FILE
        COMPDEFINES : /DMX_COMPAT_32   /DMATLAB_MEX_FILE
        OPTIMFLAGS : /O2 /DNDEBUG
        INCLUDE : -I"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\redist\intel64\mkl" -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"  -I"C:\Program Files\MATLAB\R2015b\extern\include"
        DEBUGFLAGS : /Z7
        LINKER : link
        LINKFLAGS :  /nologo /manifest /INCREMENTAL:NO
        LINKTYPE : /DLL
        LINKEXPORT :  /EXPORT:MEXFUNCTION
        LINKLIBS : /LIBPATH:"C:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.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
        LINKDEBUGFLAGS : /debug /PDB:"Fsolution.mexw64.pdb"
        LINKOPTIMFLAGS : 
        OBJEXT : .obj
        LDEXT : .mexw64
        SETENV : set COMPILER=ifort 
                    set COMPFLAGS=/c /Qopenmp /nologo /fpp /Qprec /MD /fp:source /assume:bscc -I"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\redist\intel64\mkl" -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"  -I"C:\Program Files\MATLAB\R2015b\extern\include"  /DMX_COMPAT_32   /DMATLAB_MEX_FILE /DMX_COMPAT_32   /DMATLAB_MEX_FILE $MATLABMEX 
                    set OPTIMFLAGS=/O2 /DNDEBUG 
                    set DEBUGFLAGS=/Z7 
                    set LINKER=link 
                    set LINKFLAGS= /nologo /manifest /INCREMENTAL:NO /export:%ENTRYPOINT% /DLL /LIBPATH:"C:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.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  /EXPORT:MEXFUNCTION 
                    set LINKDEBUGFLAGS=/debug /PDB:"%OUTDIR%%MEX_NAME%.mexw64.pdb" 
                    set NAME_OUTPUT=/out:"%OUTDIR%%MEX_NAME%%MEX_EXT%"
        FORTRANROOT : C:\Program Files (x86)\Intel\Composer XE 2013 SP1\
        VCROOT : C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
        SDKROOT : C:\Program Files (x86)\Windows Kits\8.1\
        MATLABROOT : C:\Program Files\MATLAB\R2015b
        ARCH : win64
        SRC : "C:\Users\Marx\Dropbox\PRT Uncertainty\Code\Revised Manuscript\Habit-fixme-test\Fsolution.f90"
        OBJ : C:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.obj
        OBJS : C:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.obj 
        SRCROOT : C:\Users\Marx\Dropbox\PRT Uncertainty\Code\Revised Manuscript\Habit-fixme-test\Fsolution
        DEF : C:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.def
        EXP : Fsolution.exp
        LIB : Fsolution.lib
        EXE : Fsolution.mexw64
        ILK : Fsolution.ilk
        MANIFEST : Fsolution.mexw64.manifest
        TEMPNAME : Fsolution
        EXEDIR : 
        EXENAME : Fsolution
        OPTIM : /O2 /DNDEBUG
        LINKOPTIM : 
    -------------------------------------------------------------------
    Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2013'.
    ifort /c /Qopenmp /nologo /fpp /Qprec /MD /fp:source /assume:bscc -I"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\redist\intel64\mkl" -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"  -I"C:\Program Files\MATLAB\R2015b\extern\include"  /DMX_COMPAT_32   /DMATLAB_MEX_FILE /O2 /DNDEBUG "C:\Users\Marx\Dropbox\PRT Uncertainty\Code\Revised Manuscript\Habit-fixme-test\Fsolution.f90" /FoC:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.obj
    link  /nologo /manifest /INCREMENTAL:NO /DLL   /EXPORT:MEXFUNCTION C:\Users\Marx\AppData\Local\Temp\mex_8780273189710_2516\Fsolution.obj  /LIBPATH:"C:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.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 /out:Fsolution.mexw64
       Creating library Fsolution.lib and object Fsolution.exp
    
    mt -outputresource:Fsolution.mexw64;2 -manifest Fsolution.mexw64.manifest
    Microsoft (R) Manifest Tool version 6.3.9600.16384
    
    Copyright (c) Microsoft Corporation 2012. 
    
    All rights reserved.
    
    
    del Fsolution.exp Fsolution.lib Fsolution.mexw64.manifest Fsolution.ilk
    MEX completed successfully.
    
    但是,Fsolution.mexw64无法执行,出现以下错误:

    无效的MEX文件“…\Fsolution.mexw64”:找不到指定的模块

    依赖沃克证明了这一点

    MKL_INTEL_THREAD.DLL“打开文件时出错。系统找不到指定的文件(2)。”

    作为替代,我用

    mex -v Fsolution.f90 COMPFLAGS="/Qopenmp $COMPFLAGS" ...
    -L"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\mkl\lib\intel64" -lmkl_intel_thread ...
    -I"C:\Program Files (x86)\VNI\imsl\fnl701\Intel64\include\dll"
    

    但是在MATLAB和dependency walker中都收到了相同的错误。其他不依赖MKL_INTEL_THREAD.DLL的mex函数执行时不会出错。

    此问题是动态库名称更改的结果。在IMSL Fortran库版本6中,动态库是“link_fnl_shared.h”。在版本7中,它被命名为“link_fnl_shared_imsl.h”


    请参阅。

    我在执行使用“英特尔MKL”的C语言编写的MATLAB
    mex
    函数时遇到了相同的问题。Dependency walker显示了同样的问题。我只是将文件(在计算机中找到,通常在
    C:\
    中)复制到C文件所在的文件夹中。然后它就起作用了

    希望这会有所帮助