问题标签 [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 投票
1 回答
947 浏览

matlab - 如何在 mex 文件中调用 imresize(MATLAB)

我编写了以下代码来使用imresizemex 文件中的函数。

它给出了一个错误:Function IMRESIZE expected its second input, SCALE, to be nonzero.我该如何解决它?

0 投票
3 回答
278 浏览

c - 在 C 库中释放静态结构

我正在进行的一个项目涉及一个飞行器,其 GNC 代码用 C 库 (.out) 编写。我们必须以 .out 库的形式从 LabVIEW(主要的航空电子软件)调用此 C 代码,并且该软件的性质需要静态指针来存储对函数的连续调用之间的数据。我们在整个飞行过程中定期调用 GNC 执行功能。我现在尝试在 Windows 上的 DLL 中使用 Matlab MEX 包装器调用此函数,这发现了一些内存管理问题。

我在函数的开头声明结构,如下所示:

这发生在函数的每次运行期间。但是,在多次迭代调用此函数后,它总是在尝试退出后崩溃并出现内存分段错误。我的理解是这个内存应该自己清理,这是不正确的吗?

为了手动清理它,我将这些行添加到最后,仅在清理迭代时调用:

这是释放此内存的正确方法吗?我可以释放这段记忆吗?除了 C 在最后一次调用后没有正确放弃内存或 Matlab 没有正确管理其内存之外,分段错误是否还有其他原因?我已经到处寻找有类似问题的人(甚至联系 Mathworks),但运气不佳,因此非常感谢任何意见或建议。

0 投票
1 回答
1451 浏览

matlab - Mex 文件仅在第二次使用时给出分段错误

以下代码编译成功,第一次调用时返回正确结果。第二次进行相同的调用,我得到一个分段错误错误。

我称之为:

代码在分段错误之前到达两个 mexPrintf 调用之间的行(即第一个调用打印,但不是第二个)。

我在 Matlab 2007a(是的,我知道)、Win7 64bit 和 VS 2008 上。

0 投票
2 回答
4214 浏览

matlab - matlab mex:访问数据

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

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

以下两行分别使我的 matlab 崩溃:

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

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

提前非常感谢!

0 投票
1 回答
964 浏览

matlab - 在 Max-flow/min-cut 算法中链接 mex 文件时出错

我正在尝试在 MATLAB 中实现“基于 GrabCut 的对象分割技术”方法。为了最小化马尔可夫随机场能量函数,我使用这里提供的标准 Max-flow/min-cut 算法:http: //vision.csd.uwo.ca/code/

问题:当我尝试创建一个mex文件来调用MATLAB中的Graph创建和最小化函数时,我得到以下错误:

未定义符号:“Graph::Graph(int, int, void ( )(char ))”,引用自:GraphTest.o 中的_mexFunction

ld:未找到符号 collect2:ld 返回 1 个退出状态

mex:“GraphTest.mexmaci64”的链接失败。

我的代码真的很简单,只是复制了README文件中提到的部分代码如下:

如果以前使用过此软件包或遇到过类似错误的任何人都可以提供有关该问题的一些见解,我将不胜感激。

提前致谢!

0 投票
1 回答
1112 浏览

c++ - 为什么这个 CPP 文件在 mex -largeArrayDims 期间会出错?

我已经下载了一个代码:

mex -largeArrayDims thisfile.cpp与选择Visual C++ 2010 compiler一起使用。但是,它给了我这些错误:

mex -largeArrayDims a_times_b_cmplx.cpp

a_times_b_cmplx.cpp(45): 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
a_times_b_cmplx.cpp(45):错误 C2143:语法错误:','之前缺失'*'
a_times_b_cmplx.cpp(54):错误 C2065::未声明的'pntrb'标识符
a_times_b_cmplx.cpp(55):错误 C2065::未声明的'pntrb'标识符
a_times_b_cmplx.cpp(57):错误 C2065 ::未声明的'b'标识符
a_times_b_cmplx.cpp(57):错误 C2065 ::未声明的'indx'标识符
a_times_b_cmplx.cpp(58):错误 C2065:'c':未声明的标识符
a_times_b_cmplx.cpp(156):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
a_times_b_cmplx.cpp(156):错误 C2143:语法错误:缺少','之前'*'
a_times_b_cmplx.cpp(159):错误 C2065::未声明的'c'标识符
a_times_b_cmplx.cpp(169):错误 C2065 ::未声明的'pntrb'标识符
a_times_b_cmplx.cpp(170): 错误 C2065: 'pntrb': 未声明的标识符
a_times_b_cmplx.cpp(172): 错误 C2065: 'indx': 未声明的标识符
a_times_b_cmplx.cpp(174): 错误 C2065: 'c': 未声明的标识符
a_times_b_cmplx.cpp(174): 错误 C2065: 'b': 未声明的标识符
a_times_b_cmplx.cpp(178): 错误 C2065: 'c': 未声明的标识符
a_times_b_cmplx.cpp(178): 错误 C2065: 'b': 未声明的标识符
a_times_b_cmplx.cpp(180): 错误 C2065: 'c': 未声明的标识符
a_times_b_cmplx.cpp(180):错误 C2065: 'b': 未声明的标识符

C:\PROGRA~1\MATLAB\R2010A\BIN\MEX.PL: 错误:编译'a_times_b_cmplx.cpp'失败。

我不知道为什么我会收到这些错误。这是一个已完成的许可代码,我应该能够将其混合。你能告诉我原因并告诉我解决这个问题的方法吗?我真的不知道是编译器的问题还是我的问题。

我想可能是因为mwIndex. 但是我该如何解决呢?

0 投票
1 回答
714 浏览

c - 分段错误错误

我正在尝试为 RLS 过滤器编写一个 MATLAB/mex 代码来练习我的 C 语言,当然还有在我设法完成后加快代码速度。但是,在尝试使用输入运行以下代码时出现分段错误错误。

Atm 我已经删除了大量代码,因为我已经设法找出错误来自哪里;如果我在下面的代码中注释掉以下部分,它就会运行(但对我来说没有用)。我试图打印出数组中使用的索引,以查看其中一个是否变为负数,但那里没有运气。所以我真的找不到错误。很可能是一些愚蠢的事情,但我就是不知道错误是什么。我还在另一个函数(用于 LMS 过滤器)中使用了下面相同的代码片段,并且它可以正常工作。这两个函数之间的主要区别在于处理所需的临时数组的数量。所以最大的问题是:有没有人看到代码中有任何明显的错误会导致段。过错?(否则我知道代码可能不够好,

0 投票
2 回答
273 浏览

function - 在matlab中限制对m文件的mex函数调用

嘿,假设我有一个名为“myMx”的已编译 mex 文件,有没有办法禁止直接调用 myMx()?我只希望从我的 m 文件函数 callMyMx() 中调用 myMx(),因为这是我进行额外输入参数检查的地方,因此我不必在 mex 文件本身中进行。谢谢!

0 投票
1 回答
468 浏览

function - Matlab Mexfiles 和 Cuda:评估函数句柄

嘿,我有一个我想在 CUDA 的帮助下并行化的 mex 文件。当前的功能是:我将一个函数句柄和大量“点”传递给 mex 文件,它以顺序模式(在 CPU 上)评估每个点上的函数。因此它使用类似的东西:

使用 matlab 函数 feval 在点上评估函数句柄。现在我想知道当我尝试通过 CUDA 并行计算时会发生什么:这会正常工作吗?因为如果在 CPU 上使用 mexCallMATLAB 进行评估,那么使用 CUDA 不会有任何好处。但是怎么办呢?我无法想象在不使用 matlab 函数 feval 的情况下直接评估 C 中某个点的函数句柄的任何方法......

到目前为止感谢!你会帮我很多的!

0 投票
1 回答
311 浏览

performance - 无需更改代码的 Matlab MEX 减速

在过去的几周里,我一直在开发一些代码。代码包装在 MATLAB 中的 MEX 文件中。直到昨天,我通常的测试大约需要 1 秒钟。突然重新编译代码而不做任何更改后,相同的代码需要超过 4 秒。

唯一的变化发生在与我正在调用的函数完全无关的函数中。似乎所有编译器优化都从一秒钟消失到另一秒钟。

也许你们中的一个人过去经历过类似的事情并且知道如何处理?

谢谢你的建议。

编辑1:

因为我认为它依赖于编译器,这里是编译命令的输出(使用详细模式)