繁体   English   中英

Mex功能未解决的外部

[英]Mex function unresolved external

我正在尝试在MATLAB中构建mex函数。 该函数取决于C ++库。 但是,无论我做什么,都会在MATLAB中得到无法解析的外部函数。 我创建了三个简单的文件来演示该问题:

my_test123.h

_declspec(dllexport) void my_test();

my_test.cpp

extern "C" {
#include "my_test123.h"
}
void my_test() {
}

我使用以下命令编译并链接以上两个文件:

cl /LD /Femy_test.dll my_test.cpp

这将生成两个文件my_test.libmy_test.dll

第三个文件是简单的混合函数:

my_mex.cpp

#include "mex.h"

extern "C" {
void my_test(); 
}

/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
    my_test();
}

在MATLAB中,我使用以下命令:

mex  -v my_mex.cpp my_test.lib

我也尝试过:

mex  -v my_mex.cpp -lmy_test.lib

所有文件都在同一目录中,并且mex命令正在查找.lib文件(如果我尝试使用随机名称而不是my_test.lib,则会出现文件未找到错误)。

我得到的错误是:

使用mex创建库my_mex.lib和对象my_mex.exp my_mex.obj时出错:错误LNK2019:函数mexFunction my_mex.mexw64中引用的未解析外部符号my_test:致命错误LNK1120:1个未解析外部

我也尝试过将每个文件都制作为C文件(删除externs并将mexfunciton扩展名更改为.c)并在C中进行编译。但是我得到了相同的确切错误。

我正在使用Visual Studio 2013和MATLAB 2014b的64位版本。

任何帮助深表感谢。

经过数小时的研究并在MathWorks支持热线的帮助下,我发现了以下内容:

您需要考虑几个因素:

  • 您的MATLAB是32位还是64位?
  • 您的混合功能的扩展名是.c还是.cpp?
  • 您如何使用外部“ C”?
  • .dll是64位.dll还是32位.dll?

假设.dll是32位.dll,而MATLAB是32位

mex函数具有扩展名.cpp,.dll是C ++ .dll,您无需在my_test.cpp或my_mex.cpp中都添加任何外部“ C”

mex函数具有扩展名.c,.dll是C ++ .dll,您需要在my_test.cpp中添加“ extern“ C” *。

mex函数的扩展名是.cpp,.dll是 C.dll。您不需要在my_test.cpp中添加extern“ C” ,但是在my_mex.cpp中需要一个扩展名。

mex函数的扩展名是.c,.dll是 C.dll。您无需在my_test.cpp或my_mex.cpp中添加任何外部“ C”

根据mex函数文件的扩展名,MATLAB会将其编译为C或C ++文件。 知道这一点,外部用法应该很有意义。

以上所有内容仍然有效,但对于64位MATLAB而言,但您需要64位dll。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM