问题标签 [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 回答
1566 浏览

matlab - matlab mex中状态码2的构建错误

我在将 .m 文件编译为 .mexmaci64 时遇到构建错误。我的 matlab 版本是 2011a,平台 Mac OS X 10.6,使用 Xcode 3.2。

错误说明:

???构建错误:编译返回错误状态代码 2。有关详细信息,请参阅目标构建日志。

目标构建日志:

3 在 mphmm_getEstimation_data.c:13 中包含的文件中:4 mphmm_getEstimation_data.h:30:错误:在 'xb_emlrtRSI' 5 mphmm_getEstimation_data.h:31 之前的预期为 '='、','、';'、'asm' 或 ' attribute ' : 错误: 'nc_emlrtRSI' 6 mphmm_getEstimation_data.h:32 之前的预期'='、','、';'、'asm' 或'属性':错误:预期'='、','、';'、' 'oc_emlrtRSI' 7 mphmm_getEstimation_data.h:33 之前的asm' 或 ' attribute ':错误:在 'pc_emlrtRSI' 8 mphmm_getEstimation_data.h:34 之前的预期为 '='、','、';'、'asm' 或 ' attribute ':错误:'qc_emlrtRSI' 9 mphmm_getEstimation_data.c:22 之前的预期'='、','、';'、'asm' 或'属性':错误:预期'='、','、';'、'asm' 或''xb_emlrtRSI' 10 mphmm_getEstimation_data.c:23 之前的属性':错误:预期'='、'、'、';'、'asm' 或'属性' 在'nc_emlrtRSI' 11 mphmm_getEstimation_data.c:24 之前:错误:预期' ='、','、';'、'asm' 或 ' attribute ' 在 'oc_emlrtRSI' 12 mphmm_getEstimation_data.c:25 之前:错误:预期的 '='、','、';'、'asm' 或 '属性'在'pc_emlrtRSI' 13 mphmm_getEstimation_data.c:26 之前:错误:在'qc_emlrtRSI' 14 gmake 之前需要'='、','、';'、'asm' 或'属性':* [mphmm_getEstimation_data.o]

如果有人能告诉我如何解决该错误,我将不胜感激。如果我需要提供代码文件,请告诉我。抱歉,我在这方面不专业。

0 投票
1 回答
1992 浏览

matlab - 运行 Matlab mex-Algorithm 而不是 Double- in Single-Precision

我有一个当前使用双精度的工作 Matlab C 代码(mex 文件)。因此我更换了

double *datOut = mxGetPr(mxOut)float *datOut = (float*)mxGetData(mxOut);,

mxCreateDoubleMatrix经过mxCreateNumericArray()

变量的数据double类型float。唯一正在使用的其他 mex-Function 仅此mxDuplicateArray()而已。我没有对此调用进行任何更改...现在我有一个运行的代码永远不会完成。我把它删掉了很多,所以我希望它足够短,有人可以帮助我:

不知何故,这是一个无限循环,我不知道为什么,因为通过diff给定的函数定义的精度应该很容易达到myFunc()。当对函数double *datOut = mxGetPr(mxOut)mxCreateDoubleMatrix. 我还尝试通过显式传递点来调用 mex-Function point = zeros(rows, 1, 'single');

非常感谢您为我指出正确的方向或给我任何提示。谢谢!

0 投票
0 回答
4375 浏览

c++ - 将 c++ 静态库与 mex 链接时出现问题

我正在尝试在 mex 文件中使用 c++ 静态库,但我无法链接它。

这是我试图混合的 cpp 文件的来源:

这是我的“库”的头文件和源代码:

该库名为testsymcpp.lib

这是我正在使用的 mex 命令:

这是输出:

0 投票
2 回答
374 浏览

c - MexFile 导致“检测到断言”错误 - mexfiles 中的 memcpy 问题?

不幸的是,这个问题很窄,但我很茫然。

我有一个自定义 mex 文件,它采用两个 uint32 列表,每个列表都经过排序并且不包含公共条目,并返回一个排序列表,其中包含两个列表中的所有条目。代码是:

当我运行调用 mex 文件的代码时,我得到了断言检测到的错误(在表 5 中出现 Found 损坏的块 381 之类的东西。(无效的表索引)。)。断言总是出现,但不一定在同一个地方。

如果我恢复到旧版本的代码,就没有问题。所以有些东西正在破坏记忆,但我看不到它。我所做的更改之一是使用 memcpy,但在那里看不到任何问题。

再次,我很抱歉这是一个如此狭窄的问题,但任何帮助将不胜感激。

更新:肯定是 memcpy 导致了断言。如果我恢复到在循环中分配值,断言就会停止。在 mex 文件中使用 memcpy 是否有限制?

0 投票
1 回答
301 浏览

matlab - 我应该在 mex 和 windows 上使用哪个编译器

我想在 windows 下使用 mex 编译一些 cpp 文件(特别是这个链接)。我应该下载哪个编译器?

0 投票
1 回答
4211 浏览

c - 为 Matlab 编译 C MEX 文件时 size_t 和 mwSize 之间的区别

我目前正在将一些用于 32 位 Matlab 的 C MEX 文件移植到 64 位 Matlab。

在此过程中,我遇到了两种类型,一种来自 Matlab 人,一种是 C 标准。

这就是 Matlab 文档所说的mwSize

mwSize(C 和 Fortran)

输入尺寸值

描述

mwSize是一种表示大小值的类型,例如数组维度。使用此功能可实现跨平台灵活性。默认情况下,mwSize等价int于 C。使用mex -largeArrayDims开关时,mwSize等价size_t于 C。在 Fortran 中,mwSize类似地等价于INTEGER*4or INTEGER*8,基于平台和编译标志。

这就是维基百科所说的size_t

size_t是由多个 C/C++ 标准(例如,C99 ISO/IEC 9899 标准)定义的无符号数据类型,在stddef.h.[1] 中定义。它可以通过包含来进一步导入,stdlib.h因为该文件内部子包含stddef.h[2]。

此类型用于表示对象的大小。采用或返回大小的库函数期望它们属于这种类型或返回类型为size_t. 此外,最常用的基于编译器的运算符sizeof应计算为与 兼容的值size_t

的实际类型size_t取决于平台;一个常见的错误是假设size_t与 相同unsigned int,这可能会导致编程错误,[3][4] 例如,从 32 位架构迁移到 64 位架构时。

据我所知,这些类型实际上是相同的。我的问题是:

  1. 他们是吗?
  2. 如果是的话,哪一个会被认为是更好的编程品味?理想情况下,我们希望我们的代码也与未来的 Matlab 版本兼容。我猜答案是mwSize,但我不确定。

编辑:我应该补充一点,Matlab 的人都在使用它们。例如:

是一个检索 mxArray 的列数的函数。然而,当一个人创建一个矩阵时,一个人使用,

其中输入显然应该是 mwSize。

0 投票
1 回答
171 浏览

matlab - 编写 Mex 文件时出现错误消息,函数的数组输出有问题吗?

我更像是一个 Matlab 程序员,多年来没有使用过 C!现在我必须用 C 语言编写一些代码,并通过 mexFunction 命令从 Matlab 调用它。到目前为止,一切都很好。但是我的代码需要许多函数调用,其中参数和返回值都是数组。为此,我使用指针返回。但是我遇到了大约一百万个困难,一旦一个被修复,另一个被创造出来。

排序代码示例如下(实际代码海量)

我将它保存为 help_file.c 并从 MATLAB 工作区编译为:

我收到以下错误:

我最初尝试传递 Sim[i] 而不是 vdummy,但这不起作用,这就是我首先定义虚拟变量的原因。

我想这是一个微不足道的问题,但我仍然会感谢人们对此的帮助。

0 投票
4 回答
4774 浏览

c - Matlab 多线程

我正在 Matlab 上开展一个项目,我们必须优化性能,我正在考虑并行化从 .m 文件进行的几个函数调用。

这个想法很简单,从一个 Matlab 文件 (.m) 调用一个编译为 MEX 的 C 文件,然后从该 C 文件创建几个线程并从每个线程回调 matlab 函数。

理论有效,我可以创建线程,也可以调用matlab函数,问题是我不能从线程调用matlab函数:

使用 matlab 时,我们对该选项有任何限制吗?有人尝试过这样的事情吗?

编辑:有没有不需要并行工具箱的选项?

0 投票
4 回答
7617 浏览

python - 直接在 Python 中嵌入来自 Matlab MEX 文件的函数

我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些模拟结果(当然没有可用的源代码!)。Matlab 的接口实际上非常简单,因为只有一个函数,返回一个 Matlab 结构。我想知道是否有任何方法可以直接从 Python 调用 MEX 文件中的这个函数,而不必使用 Matlab?

我想到的是例如使用 SWIG 之类的东西通过提供一个自定义的 Matlab 包装器来将 C 函数导入 Python ......顺便说一下,我知道使用 scipy.io.loadmat 已经可以阅读Matlab 二进制 *.mat 数据文件,但我不知道 mat 文件中的数据表示是否与 Matlab 中的内部表示相同(在这种情况下,它可能对 MEX 包装器有用)。

这个想法当然是能够使用 MEX 中提供的功能,而系统上没有安装 Matlab。

谢谢。

0 投票
5 回答
763 浏览

c++ - 绘制 c++ 代码中间结果的最佳工具是什么?

我正在为嵌入式系统开发算法并在 C++ 代码中实现它们。在目标上测试 c++ 代码之前,我必须在 PC 上测试算法以确保数学是正确的。为此,我创建了一个 mex 文件,以便可以在 Matlab 中验证输出。

带有 mex 文件的系统运行良好,但如果目的是对算法进行快速测试,则实施起来相当麻烦;那么有没有人推荐另一种工具来绘制 c/c++ 代码?我在这个站点上阅读了一些关于 gnuplot 和 QWT 的内容,但是我对 gnuplot 的掌握还不够好,无法确定它是否比 mex 文件更容易设置。