问题标签 [mex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
464 浏览

matlab - 有没有办法将 mex 文件链接到没有 -fPIC 编译的代码

我正在尝试包装一些 C 代码以使用 Matlab/Octave 访问它。问题是代码没有用-fPIC编译,这似乎是用mex文件包装它的必要条件。我无权访问所有源代码,因此无法使用 -fPIC 重新编译。有没有办法解决这个问题?

0 投票
1 回答
768 浏览

matlab - 使用 OpenCV 函数为 Matlab 编译 64 位 Mexfile

嘿人们!我在 Matlab (2008) 中使用了 opencv 库的一个函数,我从中得到了一个 mexw32 文件。不幸的是,这些不再适用于 64 位 Windows 7 系统,Matlab 会自动安装为 64 位版本。编译 64 位版本需要什么?我没有原始的 C 文件,但该函数只是 opencv 函数的包装器。(我可以使用 VisualStudio 2008 或 2010 进行编译)

感谢您的任何建议或提示!

0 投票
2 回答
3353 浏览

matlab - 使用 MAT 文件中的索引加载特定变量

我在一台有很多 RAM 的机器上有一个框架,它生成带有一个非常大且专门命名的矩阵的 MAT 文件。这个矩阵的计算只进行一次并且需要很多时间。最后将其存储到磁盘上的 MAT 文件中。

在使用阶段,应加载此 MAT 文件。问题是我不需要所有数据 - 只需要从该矩阵中选择某些列。

例如,我在大小为 [500x250000] 的文件 crfh.mat 中有一个矩阵“符号”并键入 double。我可能有兴趣仅使用该矩阵中的“ids”加载向量:

符号(:,ID)

有没有办法做到这一点?我在网上搜索,似乎没有人表示需要这种功能。我正在考虑编写一个 MEX 函数 select_mat() ,例如:

sign_sub = select_mat(mat_file, var_name, ids);

0 投票
2 回答
1641 浏览

windows - 将 FFTW 链接到 Matlab Mex 文件

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

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

.

我正在使用带有 MinGW 的 gnumex 来构建 mex 文件,因为 LCC 似乎有一些问题。我曾尝试使用 FFTW 站点 ( http://www.fftw.org/install/windows.html ) 中的 32 位 DLL。我曾尝试在 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 文件运行良好。在这一点上我几乎放弃了,我很想提出替代的测试方法。

0 投票
1 回答
2543 浏览

c++ - matlab mex 文件和 C++ dll (windows)

我有一个带有 Test 类的 DLL。标题:

和来源:

现在我从 mex 文件中使用它:

问题是,该变量str未正确传递给方法doit。在方法内部,它包含 rabish。我发现通过引用传递的任何对象都会发生这种情况。我做错了什么?请帮忙。

PS:如果我将声明更改为 'int doit(const char *)' 一切正常。

0 投票
1 回答
1235 浏览

c# - 无效的 mex 文件,morphmex.mexw32 找不到指定的模块

我在 Matlab 中编写了一个用于图像处理的程序,并使用 matlab builder ne 创建了该程序的 .dll。我的matlab版本是2010a。我用 c# 编写了一个程序来使用 matlab 函数。它可以在我安装了 matlab 的计算机上运行。但是当我在没有 matlab 的计算机上安装 MCR 并想运行该程序时,抛出了 ac# 异常。它说:

MWMCR::EvaluateFunction error Invalid MEX-file ...\toolbox\images\images\private\morphmex.mexw32':找不到指定的模块。=>MYMATFUNC.m 在 6 处出错。

... Matlab M 代码堆栈跟踪 ... 在文件 ...\toolbox\images\images\private\morphop.m,name ....

任何人都可以帮助解决问题吗?

0 投票
3 回答
3957 浏览

c++ - 使用 Visual C++ 编译器 (Visual Studio 2010) 的可变数组大小出错。如何规避这个问题?

我在编译一个 c++ 文件时遇到了一些麻烦,该文件在 GCC 下作为以前的版本运行良好。问题是,我正在使用可变数组大小的向量:

我目前正在使用 Visual-Studio 2010 C++ 编译器来构建 Matlab 64 位 Mex 文件。由于 VC++ 不允许我使用在编译时大小未知的数组,我收到以下错误消息:

错误 2057:预期的常量表达式错误 2466:错误 2133:未知大小

有没有办法使用 GCC 编译器选项构建 64 位 mex 文件,或者在 Matlab 下使用不同的 64 位编译器构建它?

提前致谢!!

0 投票
1 回答
963 浏览

visual-studio-2008 - 从 mex 文件显式/隐式加载 dll

我的问题可能与此重复:matlab mex files and C++ dll (windows),但不完全是。

当我尝试从 Matlab 的 mex 文件(Visual Studio 2008、Windows 7 64bit、Matlab 2010b)中显式加载 dll 时,加载在运行时失败(我得到一个 NULL 句柄)。当不在 mex 文件中使用时,相同的代码可以正常工作。

当我尝试通过链接到 .lib 文件来隐式加载时,我收到unresolved external symbol关于 dll 中定义的函数的链接器错误。同样,当不在 mex 文件中使用时,相同的代码也可以正常工作。

原因是否与上述 SO 问题的答案相同,还是我遗漏了什么?如果原因相同,除了上述问题中建议的解决方案之外,还有其他解决方案吗?

0 投票
1 回答
1347 浏览

matlab - FORTRAN-MATLAB MEX 文件错误

这是Subhash。我在链接 fortran-matlab mex 文件时遇到问题。我正在运行 MATLAB R2010a。我正在尝试在 MATLAB 中混合 fortran 子例程。我已经安装了 MSYS、MinGW 和 gfortran。我还在 c:\documents\MATLAB 文件夹中下载并提取了 gnumex。我输入 gnumex 运行安装设置。此时,我看到一个弹出窗口,我输入了以下内容:

  1. MinGW 的根目录 ---> 指向 c:\mingw b) Cygwin 的
  2. 根目录 -----> 留空 c)
  3. g95.exe 的路径 ------> c:\mingw\bin
  4. gfortran.exe 的路径 ------> c:\program files\gfortran\bin e)
  5. gnumex 实用程序的路径 ------> c:\users.....\matlab\gnumex
  6. 环境链接类型 ------> MinGW
  7. 生成 mex dll 或引擎-----> mex
  8. 编译语言-------> fortran 77
  9. 添加存根 ------> 否
  10. 优化级别 -----> -O3

  11. 库和 .def 文件的路径 c:\users...\Roaming\MathWorks\MATLAB\R2010a\gnumex

  12. 要创建的 Mex 选项文件:c\users...\Roaming\MathWorks\MATLAB\R2010a\mexopts.bat

以上是我用 gnumex 安装 mex 的设置。当我点击制作选项文件时,会弹出一条警告消息,上面写着“无法纠正 mex.pl .....“无法打开 c:...\R2010a\bin\mex.pl 进行写入”

当我点击确定时,它再次弹出确认覆盖 mexopts.bat 。我点击确认并创建了 opt 文件。

此时我应该准备好我的 mex 设置。但是,当我运行 fortran mex 示例 xtimesy.f 等时(我在命令提示符下使用 mex filename.f),我收到以下错误

g77:getValidInputLinkLibraries:没有这样的文件或目录 c:\prog~1\MATLAB\R2010A\BIN\MEX.PL:错误:“xtimesy.mexw32”的链接失败。在 222 处使用 ---> mex 时出错,无法成功完成。

我尝试了多次卸载,但最终出现了同样的错误。谁能让我知道我哪里出错了。这不是链接g77的正确程序吗?请对此有所了解。

我很感激你的时间..

谢谢。

0 投票
1 回答
2503 浏览

c++ - 将极坐标图像转换为笛卡尔图像

我正在尝试将极坐标中的图像(轴是角度 x 半径)转换为笛卡尔坐标中的图像(轴是 x 和 y)。

这在 matlab 中使用 pcolor() 很简单,但问题是我必须在 mex 文件中执行此操作(C++ 到 Matlab 的接口)。这似乎很容易,除了 Matlab 只使用数组容器,所以我想不出一个聪明或雄辩的方法来做到这一点。

我确实可以访问图像尺寸,我可以想象一种非常混乱的方式,将输入图像数组重新打包为 C++ 中的矩阵并执行转换,但这会很混乱且有问题。

此外,我需要能够在 xy 平原中的点之间插入间隙。

有任何想法吗?