嘿那里,我真的不明白如何访问通过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显然是指向第一个参数的指针时,为什么我不能访问数据呢?
非常感谢提前!
我有一个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上构建这个,但最终会喜欢它在所有平台上工作.平台特定的建议非常受欢迎,但多平台的想法真的是我追求的.
我正在尝试 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/ 但它给出了相同的错误。
有谁知道解决办法吗?
谢谢
几个星期以来我一直坚持这个问题并一直在互联网上寻找解决方案,但到目前为止还不太好......
所以我有一个由其他人编写的程序,我尝试在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++ 代码,我想将它集成到 MATLAB 中,以便我可以在我的 matlab 代码中使用它。如果它是一个单独的代码来制作它的 mex 文件将是最好的选择。但是既然现在是需要编译构建才能运行的代码,我不知道如何使用这段代码中的功能。
为整个代码制作 mex 文件是唯一的选择还是有其他解决方法?另外,我想了解如何为整个代码制作 mex 文件然后构建它。
为了获得更多见解,这是我试图在 matlab http://graphics.stanford.edu/projects/drf/densecrf_v_2_2.zip 中集成的代码。谢谢你!
我编写了一个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 ++文件编译为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 ×7
mex ×7
c++ ×5
c ×3
gcc ×1
integration ×1
linux ×1
matrix ×1
system-calls ×1
visual-c++ ×1