标签: mex

matlab mex:访问数据

嘿那里,我真的不明白如何访问通过matlab中的参数传递给mex函数的数据.假设我有'默认'网关功能

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
Run Code Online (Sandbox Code Playgroud)

现在我得到了指向1.输入参数的指针:

double* data_in;
data_in = mxGetPr(prhs[0]);
Run Code Online (Sandbox Code Playgroud)

以下几行每个单独使我的matlab崩溃:

mexPrintf("%d", *data_in);
mexPrintf("%d", data_in[1]);
Run Code Online (Sandbox Code Playgroud)

但是,当data_in显然是指向第一个参数的指针时,为什么我不能访问数据呢?

  1. 我什么时候需要将指针声明为double*,何时声明为mxArray*?有时我会看到类似的东西:mxArray*arr = mxCreateDoubleMatrix(n,m,mxREAL);!?

非常感谢提前!

matlab mex

1
推荐指数
1
解决办法
4129
查看次数

从另一个启动一个C++应用程序,并与之通信

我有一个C++(技术上是MATLAB mex)程序,我打算用它在我的系统上启动一个独立的纯C++ slave程序.主调用程序可能如下所示:

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){
    system ("path/to/slave/program");
}
Run Code Online (Sandbox Code Playgroud)

一旦从站启动,我就会想要第二个mex程序,它将与从程序通信并将数据发送到从程序.发送的数据将采用大型C++数组的形式.

我想我需要对slave程序(可能是它的pid?)进行某种处理,这是一种发送消息的方法,并且可以说是奴隶程序监听传入消息的一种方式.

我没有经验可以让单独的C++程序相互通信,所以在这方面的任何提示都会受到赞赏.此外,如果有任何特定的MATLAB mex特定警告,我很想知道这些.


编辑:我应该提到我正在Ubuntu上构建这个,但最终会喜欢它在所有平台上工作.平台特定的建议非常受欢迎,但多平台的想法真的是我追求的.

c c++ matlab system-calls mex

1
推荐指数
1
解决办法
571
查看次数

使用 MS Visual C++ 2010 'sys/resource.h' 编译 C:没有这样的文件

我正在尝试 MEX(编译)链接为http://www.wfg.csse.uwa.edu.au/hypervolume/上的“Metric WFG implementation”的实现

使用 Microsoft Visual C++ 2010 编译器执行此操作时,我收到有关 sys/time.h 和 stdbool.h 的错误。

我使用以下内容创建了自己的 stdbool.h:

#pragma once

#define false   0
#define true    1

#define bool int
Run Code Online (Sandbox Code Playgroud)

并检查 sys/time.h 到 time.h。

但是,我现在遇到了以下问题:

wfg.c(37) : fatal error C1083: Cannot open include file: 'sys/resource.h': No such file or directory 
Run Code Online (Sandbox Code Playgroud)

我尝试删除 sys/ 但它给出了相同的错误。

有谁知道解决办法吗?

谢谢

c c++ matlab mex visual-c++

1
推荐指数
1
解决办法
9603
查看次数

/usr/../libstdc++.so.6:未找到版本`GLIBCXX_3.4.11'(需要......)

几个星期以来我一直坚持这个问题并一直在互联网上寻找解决方案,但到目前为止还不太好......

所以我有一个由其他人编写的程序,我尝试在Matlab中编译它以使其工作.我的电脑是Red-hat企业Linux工作站(64位),安装了gcc 4.4.3和Matlab 2011b.gcc与我的Matlab兼容(http://www.mathworks.com/support/compilers/R2011b/glnxa64.html).

编译工作正常(我的意思是,在Matlab命令窗口中没有出现错误信息).但是在编译之后,每当我使用编译中的特定函数(它的调用"mexLasso")时,它都会显示如下错误:

***无效的MEX文件'/usr/local/matlab_R2011b/toolbox/spams-matlab/build/mexLasso.mexa64':/ usr/local/matlab_R2011b/bin/glnxa64/../../sys/os/glnxa64 /libstdc++.so.6:找不到版本`GLIBCXX_3.4.11'(/usr/local/matlab_R2011b/toolbox/spams-matlab/build/mexLasso.mexa64要求)

测试错误(第24行)alpha = mexLasso(X,D,param); *

所以我在终端输入"strings /usr/lib/libstdc++.so.6 | grep GLIBC",我发现其中实际上是"GLIBCXX_3.4.11".

我一直在使用Linux和gcc的东西只有几个月......所以仍然有很多我不理解的东西.如果您能详细解释它将会有很大帮助.谢谢!!

%%更多细节:我从http://spams-devel.gforge.inria.fr/downloads.html获得了机器学习的这些程序.奇怪的是,在编译之后,该包中的其他函数工作正常(例如"mexTrainDL").

c++ linux matlab gcc mex

1
推荐指数
1
解决办法
2万
查看次数

将 C++ 库转换为 MATLAB mex

我有一个很大的 C++ 代码,我想将它集成到 MATLAB 中,以便我可以在我的 matlab 代码中使用它。如果它是一个单独的代码来制作它的 mex 文件将是最好的选择。但是既然现在是需要编译构建才能运行的代码,我不知道如何使用这段代码中的功能。
为整个代码制作 mex 文件是唯一的选择还是有其他解决方法?另外,我想了解如何为整个代码制作 mex 文件然后构建它。

为了获得更多见解,这是我试图在 matlab http://graphics.stanford.edu/projects/drf/densecrf_v_2_2.zip 中集成的代码。谢谢你!

c++ integration matlab mex

1
推荐指数
1
解决办法
3600
查看次数

使用mex将Matlab中的大矩阵传递给C:Matlab崩溃

我编写了一个mex代码,它从matlab代码向C代码发送标量和矩阵.它适用于较小的矩阵.但是,当我尝试传递大的稀疏矩阵(大小~8448 x 3264)时,matlab崩溃并出现以下错误:

我收到以下错误:Matlab遇到内部问题,需要关闭.

                  *Detailed error report*


------------------------------------------------------------------------
         Segmentation violation detected at Mon Feb  9 13:21:48 2015
  ------------------------------------------------------------------------

  Configuration:
    Crash Decoding     : Disabled
    Current Visual     : None
    Default Encoding   : UTF-8
    GNU C Library      : 2.19 stable
    MATLAB Architecture: glnxa64
    MATLAB Root        : /usr/local/MATLAB/R2014b
    MATLAB Version     : 8.4.0.150421 (R2014b)
    Operating System   : Linux 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64
    Processor ID       : x86 Family 6 Model 44 Stepping 2, GenuineIntel
    Software OpenGL    : 1
    Virtual …
Run Code Online (Sandbox Code Playgroud)

c c++ matlab matrix mex

0
推荐指数
1
解决办法
483
查看次数

如何在mex编译代码语句中使用变量?

我正在将我的c ++文件编译为mex文件。我将对mex文件(例如copyfile或)进行以下操作movefile。所以我想使用c ++名称的变量。例如,我有一个文件test.cpp。然后我在matlab命令中输入以下代码,

mex test.cpp
Run Code Online (Sandbox Code Playgroud)

我要这个:

filename = 'test';
mex [filename '.cpp'];
Run Code Online (Sandbox Code Playgroud)

但这没有用。我可以用其他方式吗?

matlab mex

0
推荐指数
1
解决办法
38
查看次数

标签 统计

matlab ×7

mex ×7

c++ ×5

c ×3

gcc ×1

integration ×1

linux ×1

matrix ×1

system-calls ×1

visual-c++ ×1