gpt4 book ai didi

c++ - mex 函数无法解析 eclipse

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:25 25 4
gpt4 key购买 nike

我正在尝试在 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

在这个 site 中的“创建 C 源 MEX 文件”下.

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

感谢您的帮助。

最佳答案

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

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

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

完成。您现在可以在 Eclipse 中编译 MEX 文件。以下代码应编译为 MEX 函数,该函数返回实数、标量、 double 输入值的根:

#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/<em>your_initials</em>/workspace/<em>project_name</em>/Debug/<em>name_of_mex_function</em> .


使用的版本:
Eclipse(Luna 服务版本 2 (4.4.2))
Linux:4.3.3-2-ARCH(64 位)
Matlab: R2015a
海合会:5.3.0

关于c++ - mex 函数无法解析 eclipse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28214068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com