如何在mex文件中使用CLAPACK,BLAS或LAPACK?

时间:2012-01-08 15:08:49

标签: mex lapack blas

我在MATLAB中编写MEX文件时遇到问题,该文件可以执行简单的线性操作,例如取矩阵的逆矩阵。我已成功设法使用Visual Studio 2010获取矩阵的反转并成功创建了一个MEX文件,因此我遇到的唯一问题就是将这两个概念放在一起。我试图编译一个MEX示例代码,我从MathWorks站点获得但没有运气。

这是我尝试过的,

  1. 保存文件(重命名)我从MathWorks获得.c扩展名,然后尝试在MATLAB中编译得到:

      

    创建库C:\ Users \ CIT \ AppData \ Local \ Temp \ mex_bKHjrl \ templib.x   和对象C:\ Users \ CIT \ AppData \ Local \ Temp \ mex_bKHjrl \ templib.exp   eko1.obj:错误LNK2019:引用了未解析的外部符号dgesv   在函数mexFunction eko1.mexw64:致命错误LNK1120:1   未解决的外部因素

  2. 此外,我尝试将其编译为.cpp文件,但是因为它没有识别memcpy函数而发生错误。

  3. 由于这些不起作用,我编写了自己的程序,使用了LAPACK库中的子程序dgetrf和dgetri但是发生了错误:

      

    c:\ users \ cit \ documents \ matlab \ f2c.h(16):错误C2371:'复杂':   重新定义;不同的基本类型           C:\ Program Files \ MATLAB \ R2011b \ extern \ include \ lapack.h(39):参见'complex'的声明c:\ users \ cit \ documents \ matlab \ f2c.h(17)   :错误C2371:'doublecomplex':重新定义;不同的基本类型           C:\ Program Files \ MATLAB \ R2011b \ extern \ include \ lapack.h(40):参见'doublecomplex'eko2.cpp(29)的声明:错误C2057:   预期的常量表达式eko2.cpp(29):错误C2466:不能   分配一个常量大小为0的数组eko2.cpp(29):错误C2133:   'ipiv':未知大小eko2.cpp(33):错误C2664:'dgetrf':不能   将参数1从'integer *'转换为'ptrdiff_t *'           指向的类型是无关的;转换需要reinterpret_cast,C风格的转换或函数式转换eko2.cpp(34):   错误C2664:'dgetri':无法将参数1从'integer *'转换为   'ptrdiff_t *'           指向的类型是无关的;转换需要reinterpret_cast,C风格的转换或函数式转换

  4. 你们给我的任何帮助都将非常感激

    提前致谢。

1 个答案:

答案 0 :(得分:0)

没有任何代码可以看到您尝试过的内容,但很难说,但是......为了在matlab中正确编译依赖于其他库的mex文件,您需要在编译命令中指定这些库。使用mex filename.c -v -l*libraryname*.lib。 -l开关向编译器指示您要指定要包含的库。如果找不到这个库,我将在命令中包含库的完整路径。我希望能为你提供一些帮助。使用这种方法对我来说是成功的。