C++ Mex函数未解析外部
我试图在MATLAB中构建一个mex函数。函数依赖于C++库。然而,无论我做什么,我都会在MATLAB中得到未解析的外部。我创建了三个简单的文件来演示这个问题: my_test123.h my_test.cpp 我使用以下命令编译并链接上面的两个文件:C++ Mex函数未解析外部,c++,matlab,mex,C++,Matlab,Mex,我试图在MATLAB中构建一个mex函数。函数依赖于C++库。然而,无论我做什么,我都会在MATLAB中得到未解析的外部。我创建了三个简单的文件来演示这个问题: my_test123.h my_test.cpp 我使用以下命令编译并链接上面的两个文件: cl /LD /Femy_test.dll my_test.cpp 这将生成两个文件,my_test.lib和my_test.dll 第三个文件是一个普通的MEX函数: my_mex.cpp 在MATLAB中,我使用以下命令: mex -v
cl /LD /Femy_test.dll my_test.cpp
这将生成两个文件,my_test.lib和my_test.dll
第三个文件是一个普通的MEX函数:
my_mex.cpp
在MATLAB中,我使用以下命令:
mex -v my_mex.cpp my_test.lib
我还尝试:
mex -v my_mex.cpp -lmy_test.lib
所有文件都在同一个目录中,并且mex命令正在查找.lib文件(如果我尝试使用随机名称而不是我的_test.lib,则会出现“未找到文件”错误)
我得到的错误是:
使用mex时出错
创建库my_mex.lib和对象my_mex.exp
my_mex.obj:错误LNK2019:函数mexFunction中引用的未解析外部符号my_测试
my_mex.mexw64:致命错误LNK1120:1未解析的外部
我也尝试过将每个文件都变成C文件(删除外部文件并将MexFunctionon扩展名改为.C)并用C编译,但我得到了同样的错误
我使用的是Visual Studio 2013和64位版本的MATLAB 2014b
非常感谢您的帮助 经过数小时的研究和MathWorks支持热线的帮助,我发现了以下几点: 您需要考虑几个因素:
- 您的MATLAB是32位还是64位
- 是mexfunction.c还是.cpp的扩展
- 你是如何使用外部“C”的
- .dll是64位的.dll还是32位的.dll李>
看起来取决于MEX函数文件的扩展,Matlab将其编译为C或C++文件。知道这一点,外部使用应该有意义。
以上所有内容仍然有效,但对于64位MATLAB,您需要一个64位dll。#include "mex.h"
extern "C" {
void my_test();
}
/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
my_test();
}
mex -v my_mex.cpp my_test.lib
mex -v my_mex.cpp -lmy_test.lib