从matlab调用c函数

Posted

技术标签:

【中文标题】从matlab调用c函数【英文标题】:call c function from matlab 【发布时间】:2014-09-26 03:11:54 【问题描述】:

我在 matlab 中调用 c 函数时遇到了很多麻烦。

我的c函数很简单

test.c

#include "mex.h"

int addOne(int a)

    return a+1;

我在 matlab 命令窗口中输入了 mex test.c,我得到了这个错误信息

Undefined symbols for architecture x86_64:
  "_mexFunction", referenced from:
     -exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

    mex: link of ' "test.mexmaci64"' failed.

我的 Matlab 是 2013a,osx 10.9,xcode 5.02

有人对此有任何想法吗?谢谢。

【问题讨论】:

我认为您可能需要阅读更多关于mex 的信息。你的网关功能在哪里,mexFunction?尝试启动here,或任何其他示例。 More here. 【参考方案1】:

下面是一个快速入门的示例:

addOne.cpp

#include "mex.h"

double addOne(double a)

    return a+1;


void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

    if (nrhs!=1 || nlhs>1) mexErrMsgIdAndTxt("mex:error", "Wrong num of args");
    if (!mxIsDouble(prhs[0])) mexErrMsgIdAndTxt("mex:error", "Not double");

    plhs[0] = mxDuplicateArray(prhs[0]);

    double *x = mxGetPr(plhs[0]);
    size_t len = mxGetNumberOfElements(plhs[0]);
    for (size_t i=0; i<len; ++i) 
        x[i] = addOne(x[i]);
    

MATLAB:

>> mex -largeArrayDims addOne.cpp
>> x = magic(4)
x =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> addOne(x)
ans =
    17     3     4    14
     6    12    11     9
    10     8     7    13
     5    15    16     2

【讨论】:

以上是关于从matlab调用c函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C 调用在 MATLAB 中创建并在 C 中编译的函数?

错误:mclmcr.h:没有这样的文件或目录从 C 调用 matlab 函数

从 C 代码调用 numpy 函数

C++调用matlab数学函数问题

如何从 C/C++ 中止 MATLAB m 文件函数?

查看代码生成准备问题,从 Matlab 函数生成 c 代码