【问题标题】:How can I use CLAPACK,BLAS or LAPACK in a mex file?如何在 mex 文件中使用 CLAPACK、BLAS 或 LAPACK?
【发布时间】:2023-03-06 14:15:01
【问题描述】:

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

这是我尝试过的,

  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) :参见“复杂”的声明 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 从“整数 *”转换为 'ptrdiff_t *' 指向的类型是不相关的;转换需要 reinterpret_cast、C-style cast 或 function-style cast

如果你们能给我任何帮助,我们将不胜感激

提前致谢。

【问题讨论】:

    标签: mex lapack blas


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多