标签: mex

MATLAB MEX接口,具有多个函数的类对象

我正在使用MEX接口在MATLAB中运行C++代码.我想在MATLAB中添加几个函数来处理System对象:

sysInit()
sysRefresh()
sysSetAttribute(name, value)
String = sysGetAttribute(value)
sysExit()
Run Code Online (Sandbox Code Playgroud)

由于每个MEX dll可以包含一个函数,我需要找到一种方法来存储指向全局System对象的指针,该对象将一直存在,直到被调用删除sysExit.

我怎样才能在MATLAB中正确执行此操作?有没有办法在调用MEX函数时存储全局指针?

c++ oop matlab mex

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

如何在Matlab的MEX编译过程中进行链接

我写了一个以下形式的程序:

#include "stuff_I_need.h"

int main(){

construct_array(); // uses OpenMP pragma's
print_array();

return(0);


}
Run Code Online (Sandbox Code Playgroud)

使用以下命令正确编译,链接和运行:

`gcc44 -I/home/matteson/sundials/include/ main.c -lm -L/home/matteson/sundials/lib -lsundials_cvode -lsundials_nvecserial -fopenmp -o /home/matteson/MPI_test/CVODE_test/main_test`
Run Code Online (Sandbox Code Playgroud)

"gcc44"只是gcc 4.4版本,因为它是在一个维护多个版本gcc的集群上编译的.库sundials_cvode和sundials_nvecserial用于在构造阵列期间求解几个微分方程.

现在,当我想转移到Matlab并尝试编译表单的mex文件时:

#include "stuff_I_need.h"

void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[]){

construct_array(); // uses OpenMP pragma's
print_array();

}
Run Code Online (Sandbox Code Playgroud)

并尝试在Matlab中使用以下命令进行编译:

>> mex -v CC="gcc44" CFLAGS="\$CFLAGS -I/home/matteson/sundials/include/ -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp -L/home/matteson/sundials/lib -lsundials_cvode -lsundials_nvecserial" mex_cvode.c
Run Code Online (Sandbox Code Playgroud)

我收到以下消息,最终导致链接错误:

    -> mexopts.sh sourced from directory (DIR = $HOME/.matlab/$REL_VERSION)
   FILE = /home/matteson/.matlab/R2010b/mexopts.sh
----------------------------------------------------------------
->    MATLAB                = /misc/linux/64/opt/pkg/matlab/R2010b
->    CC                    = gcc44 …
Run Code Online (Sandbox Code Playgroud)

matlab openmp linker-errors mex

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

如何从mex函数返回浮点值,以及如何从m文件中检索它?

据我所知,mex函数的所有返回值都存储在mxArray*类型的plhs数组中.我想返回float类型的值.我该怎么做?

关于从mex函数返回它并从m文件中检索它的一些代码示例非常受欢迎.

matlab mex

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

如何使用CUDA功能阻止Matlab崩溃(错误)mex文件执行

我目前正在开发一个带有CUDA功能的mex文件,用于MATLAB.当我做错事(例如错误的指针或类似的东西)时,MATLAB总是崩溃(窗口提示我结束,发送报告进行数学运算或尝试继续).有没有办法防止这种情况发生?这样开发真的很烦人,但你可能知道自己:几乎没有人可以在没有"试错"的情况下编写完美的代码......到目前为止,谢谢!

crash matlab cuda mex

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

c ++/MATLAB Mex绑定

我即将编写一个Mex文件,所以我可以在MATLAB中使用我的c ++代码.

此代码围绕单例类(在c ++中)构建.

我已经读过,因为内存要持久,我必须使用MxAlloc而不是malloc/new,这对我使用的所有内存都是如此吗?即,我使用矢量的类,矢量使用标准机制自动分配新的内存.

因此,使用MxAlloc分配的类中的向量是否难以保持其内存?

c++ matlab mex

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

如何在MATLAB的mex c ++函数中循环遍历矩阵元素?

我试图索引为MATLAB编写外部c ++函数使用mex来操作矩阵,并且我无法使用多维索引.这里提供一些示例,但我还没有找到如何解决下面描述的问题.我有一个样本矩阵:

>> mat
mat =
 1    10
 2    20
 3    30
 4    40
 5    50
Run Code Online (Sandbox Code Playgroud)

目前我通过矩阵使用线性索引:

#include <mex.h>
#include <iostream>
using namespace std;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{ 
 //1.get pointer to input graph_list and allocate it    
    double *graph_list = mxGetPr(prhs[0]);
    mwSize mrows = mxGetM(prhs[0]);
    mwSize ncols = mxGetN(prhs[0]);  
    cout<< mrows<<" rows\n";
    cout<< ncols<<" cols\n";
    int mm, nn;
    for (nn=0;nn<ncols;nn++) {
        for (mm=0;mm<mrows;mm++){
            cout << graph_list[nn*(mrows) +mm]  <<"\n";            
        }
    }     
}
Run Code Online (Sandbox Code Playgroud)

这会产生: …

c++ matlab mex multidimensional-array

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

多个绑定的WCF Mex端点

我正在构建一个WCF服务,它将公开BasicHttp和NetTcp绑定.我还添加了两个相应的Mex端点,即

<service name="WCFTest.CalculatorService" behaviorConfiguration="WCFTest.CalculatorBehavior">
  <host>
    <baseAddresses>
      <add baseAddress = "http://localhost:8000/WCFTest/CalculatorService/" />
      <add baseAddress = "net.tcp://localhost:9000/WCFTest/CalculatorService/" />
    </baseAddresses>
  </host>

  <endpoint address ="basicHttpEP" binding="basicHttpBinding" contract="WCFTest.ICalculatorService"/>
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

  <endpoint address ="netTcpEP" binding="netTcpBinding" contract="WCFTest.ICalculatorService"/>
  <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>        
</service>
Run Code Online (Sandbox Code Playgroud)

我真的需要添加NetTcp Mex端点以及BasicHttp Mex端点吗?客户不仅会总是使用Http mex端点进行元数据解析,而不管他们是否要使用tcp进行通信?

谢谢

c# wcf mex

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

在新的matlab版本上运行旧的mex文件

我正在尝试在新版本(R2009a)上运行最初在Matlab 6.5上测试的程序.该程序使用了一些mex文件,并且在尝试运行时出现以下错误:

??? 无效的MEX文件'/normalizedCut/common_files/sparsifyc.mexglx':normalizedCut/common_files/sparsifyc.mexglx:符号mxGetIr,版本libmx.INTERNAL未在文件libmx.so中定义,带有链接时间参考.

(我试图修改的代码是Shi&Malic的Normalized cut,可以在这里找到:http: //www.cis.upenn.edu/~jshi/software/files/NcutClustering_7.zip)

如果我尝试在同一系统上运行代码,但Matlab 2007a运行正常.

2009a的向后兼容性有问题吗?系统中是否有任何标志我可以更改以帮助它工作?

当我用Google搜索它时,我看到了一些对LD_LIBRARY_PATH env变量的引用,但到底应该添加什么,我无法找到它.

谢谢,Yair

matlab mex

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

如何从mex函数访问matlab结构域中的矩阵?

我试图弄清楚如何从mex函数访问存储在matlab结构中的字段中的矩阵.

这是非常冗长的...让我解释一下:

我有一个matlab结构,定义如下:

matrixStruct = struct('matrix', {4, 4, 4; 5, 5, 5; 6, 6 ,6})
Run Code Online (Sandbox Code Playgroud)

我有一个mex函数,我希望能够接收指向矩阵中第一个元素的指针(矩阵[0] [0],用c表示),但我一直无法弄清楚如何做那.

我尝试过以下方法:

/* Pointer to the first element in the matrix (supposedly)... */
double *ptr = mxGetPr(mxGetField(prhs[0], 0, "matrix");  

/* Incrementing the pointer to access all values in the matrix */
for(i = 0; i < 3; i++){  
    printf("%f\n", *(ptr + (i * 3)));
    printf("%f\n", *(ptr + 1 + (i * 3)));
    printf("%f\n", *(ptr + 2 + (i * 3)));
}
Run Code Online (Sandbox Code Playgroud)

最终打印的内容如下:

4.000000
0.000000 …
Run Code Online (Sandbox Code Playgroud)

matlab struct mex

6
推荐指数
2
解决办法
3870
查看次数

将FFTW链接到Matlab Mex文件

我试图在mex文件中运行FFTW代码.这完全是为了开发和测试的目的.经过一些谷歌搜索,我看到其他人试图做类似的事情,并有相关的问题,但我没有找到任何解决方案.在尝试运行mex文件时,Matlab告诉我:

??? 使用错误==> chirpTransform.mxCta无效的MEX文件'\ removed\my\directory\+ chirpTransform\mxCta.mexw32':找不到指定的过程.

.

我正在使用gnumex和MinGW来构建mex文件,因为LCC似乎有一些问题.我尝试过使用FFTW站点的32位DLL(http://www.fftw.org/install/windows.html).我尝试在Matlab 2009b bin目录中使用fftwf3.dll.我使用Msys/MinGW从源代码构建了dll.在所有情况下,结果都是相同的.在所有情况下,我都执行以下操作来生成lib文件.

c:\ gnumex\mexdlltool.exe -d libfftw3f-3.def -D libfftw3f-3.dll -l libfftw3f.lib --as C:\ MinGW\bin\as.exe

我也尝试使用visual studio lib.exe工具并尝试各种mexdlltool标志.

看来我可以使用Matlab的loadlibrary功能直接调用fftwf3-3.dll中的函数.由于DLL似乎不是问题,我尝试构建静态版本的fftwf3并将其直接链接到mex文件.我得到了相同的结果!如果我删除FFTW代码,mex文件运行正常.我刚刚放弃了这一点,而且我想要提出其他测试方法.

windows matlab mex fftw

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

标签 统计

mex ×10

matlab ×9

c++ ×3

c# ×1

crash ×1

cuda ×1

fftw ×1

linker-errors ×1

multidimensional-array ×1

oop ×1

openmp ×1

struct ×1

wcf ×1

windows ×1