无法解析 MEX 函数 Eclipse

mex functions could not be resolved eclipse

本文关键字:函数 Eclipse MEX      更新时间:2023-10-16

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

我按照此说明配置了日食。

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

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

我错过了什么?

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

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

arrayProduct.c

位于本网站的"创建 C 源 MEX 文件"下。

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

感谢您的帮助。

以下说明是此博客条目的冗长版本。

假设您的 Matlab 安装驻留在 MATLABPATH 中,以下步骤使您能够在 Eclipse 中编译 MEX 函数:

  1. 转到"项目设置">"C/C++ 生成">"设置">"生成项目"。
    • 从下拉菜单"工件类型"中,选择"共享库"。
    • 在项目名称文本字段中输入 MEX 函数的所需名称。
    • 作为项目扩展,请在相应的文本字段中选择"mexa64"。
    • 选择输出前缀为空。
  2. 转到"项目设置">"C/C++ 生成">"设置">"工具设置"。
    • 在左侧导航窗格中,转到 GCC C 编译器>包含
    • 在右侧,有一个(大概是空的)包含路径列表,单击添加...符号(带有绿色"+"的纸张)。
    • 将打开"添加目录路径"对话框。单击文件系统..按钮,然后转到目录MATLABPATH/extern/include。单击"确定"。
    • 在左侧导航窗格中,转到 GCC C 链接器>库
    • 在右侧,有一个列表。添加一个。
    • 将打开输入值对话框。输入mex
    • 添加另一个名为mat的库...
    • 。最后一个名叫mx.
    • 在右侧,还有一个图书馆搜索路径列表。添加一个。
    • 将打开"添加目录路径"对话框。单击文件系统..按钮,然后转到目录MATLABPATH/bin/glnxa64。单击"确定"。
    • 在左侧导航窗格中,转到 GCC C 编译器>杂项
    • 激活选项位置无关代码 (-fPIC)。

做。您现在可以在 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位)
矩阵: R2015a
GCC:5.3.0