mex功能无法解决eclipse

时间:2015-01-29 11:51:10

标签: c++ linux eclipse matlab mex

我正在尝试在eclipse(linux)上编译c ++代码(包含mex函数,如:mxGetNumberOfElement,mxCreateDoubleScalar,mxArray等)。

我按照这个指示去了configure eclipse。

但不幸的是我遇到了这个错误:

function 'mxGetNumberOfElements' could not be resolved.
function 'mxGetNumberOfElements' could not be resolved.
function 'mxCreateDoubleScalar' could not be resolved.
....

我错过了什么?

如何配置Eclipse以识别此功能?

我的代码与Matlab示例中的代码非常相似:

arrayProduct.c

在"创建C源MEX-File"在此site

我已经在Windows上的Visual Studio中编译了我的代码并且它工作正常, 但我需要在linux上工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

以下说明是此blog entry的冗长版本。

假设您的Matlab安装位于MATLABPATH,以下步骤使您可以在Eclipse中编译MEX函数:

  1. 转到项目设置> C / C ++ Build>设置>构建工件
    • 从下拉菜单工件类型中,选择共享库
    • 在文本字段工件名称中输入所需的MEX功能名称。
    • 作为工件扩展,请在相应的文本字段中选择mexa64
    • 选择输出前缀为空。
  2. 转到项目设置> C / C ++ Build>设置>工具设置
    • 在左侧导航窗格中,转到 GCC C Compiler>包括
    • 在右边,有包含路径的sa(可能是空的)列表,点击添加... 符号(带绿色的纸张) `+&#39)
    • 将打开添加目录路径对话框。单击文件系统.. 按钮,然后转到目录MATLABPATH/extern/include。点击确定
    • 在左侧导航窗格中,转到 GCC C Linker>库
    • 在右侧,有 Libraries 列表。添加一个。
    • 输入值对话框打开。输入mex
    • 添加另一个名为mat ...
    • 的库
    • ...以及名为mx的最后一个。
    • 在右侧,还有图书馆搜索路径列表。添加一个。
    • 将打开添加目录路径对话框。单击文件系统.. 按钮,然后转到目录MATLABPATH/bin/glnxa64。点击确定
    • 在左侧导航窗格中,转到 GCC C Compiler>其它
    • 激活选项位置独立代码(-fPIC)
  3. 完成。您现在可以在Eclipse中编译MEX文件。 以下代码应编译为MEX函数,该函数返回实数,标量,双输入值的根:

    #include "mex.h"
    
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
    
        nlhs = 1;
        mxArray* arg[1];
        *arg = mxCreateDoubleMatrix(1,1,mxREAL);
        mxSetPr(*arg,mxGetPr(*prhs));
    
        mexCallMATLAB(1,plhs,1,arg,"sqrt");
    
    }
    

    编译的代码,即MEX函数,可以在Eclipse的工作区中找到:
    /home/your_initials/workspace/project_name/Debug/name_of_mex_function

    使用的版本:
    Eclipse(Luna Service Release 2(4.4.2))
    Linux:4.3.3-2-ARCH(64位)
    Matlab:R2015a
    gcc:5.3.0