我在MATLAB中编写MEX文件时遇到问题,该文件可以执行简单的线性操作,例如取矩阵的逆矩阵。我已成功设法使用Visual Studio 2010获取矩阵的反转并成功创建了一个MEX文件,因此我遇到的唯一问题就是将这两个概念放在一起。我试图编译一个MEX示例代码,我从MathWorks站点获得但没有运气。
这是我尝试过的,
保存文件(重命名)我从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 未解决的外部因素
此外,我尝试将其编译为.cpp文件,但是因为它没有识别memcpy函数而发生错误。
由于这些不起作用,我编写了自己的程序,使用了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风格的转换或函数式转换
你们给我的任何帮助都将非常感激
提前致谢。
答案 0 :(得分:0)
没有任何代码可以看到您尝试过的内容,但很难说,但是......为了在matlab中正确编译依赖于其他库的mex文件,您需要在编译命令中指定这些库。使用mex filename.c -v -l*libraryname*.lib
。 -l开关向编译器指示您要指定要包含的库。如果找不到这个库,我将在命令中包含库的完整路径。我希望能为你提供一些帮助。使用这种方法对我来说是成功的。