问题标签 [matlab-compiler]
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.
c++ - 如何在 C 中调用的 matlab 函数中使用“全局静态”变量
嗨,我目前正在使用 MATLAB 和 C 进行编码。我已经使用MATLAB Compiler (mcc) 将 MATLAB 函数编译到 C 共享库中,并在 C++ 程序中调用了共享库中的函数。
在 C++ 中调用时,是否可以声明全局变量以在 MATLAB 函数之间共享数据?
确切的说,如果matlab中有一个函数matlabA()
和函数matlabB()
,并且使用mcc编译器as cppA()
and编译成c++共享库,我可以通过在andcppB()
中声明变量为全局变量来共享它们之间的变量吗?matlabA()
matlabB()
它似乎不起作用,那么我如何在函数之间共享变量?
谢谢!
MATLAB
C++
matlab - 如何将 Matlab 类编译成 C lib?
这个问题的起源来自这里How to use "global static" variable in matlab function called in c。
我正在尝试将“全局变量”封装到一个对象中。但是我不知道如何使用 MATLAB Compiler (mcc)将 matlab 类导出到 c++
为此,我只是尝试了标准命令
Matlab 命令
Matlab 脚本
生成的库实际上是独立的函数而不是 c++ 类。
如何将 Matlab 中的类编译成 c++ 类?
我一直在寻找答案,但没有找到。
显然 matlab 命令不适合这种场景。但是我找不到任何关于将 Matlab 类构建到 c++ 类中的信息。
===========================编辑======================= =
实际cpp代码如下:@Alan
这里的 matlabA() 对应于 loadData(),它加载数据,soundByCoef(F) 对应于 matlabB(),它在主循环中完成工作。
.net - 播放框架和 WCF
我有 2 个应用程序:一个播放应用程序和一个 WCF .net 应用程序。play应用需要WCF应用强大的计算能力(自带matlab编译器)。
我想知道实现这两个应用程序之间通信的最佳方式是什么。理想情况下,我希望播放应用程序将 JSON 对象发送到 WCF,WCF 进行计算并将结果发送回播放应用程序。
关于如何实施的任何想法?
谢谢!
linux - MATLAB MCC "??? 使用 ==> mcc 时出错,返回状态 = 1"
我正在尝试使用 mcc 在 linux 集群上编译 matlab .m 文件。R2008b 安装在集群上。
我使用http://www.it.northwestern.edu/research/sscc/matlabcompiler.html作为指南。
我的 plusone.m 文件如下:
我正在使用命令“matlab -nodisplay”在集群上运行 matlab。我已经运行 mbuild -setup 并将(我的 matlab 根文件夹)/bin 和 /sbin 添加到 $PATH。
我在 MATLAB 中使用命令 mcc -m -v plusone.m,完整输出为:
“??? Error using ==> mcc Error execution mcc, return status = 1.”
对于几个不同的 .m 文件和许多不同的标志设置,此输出是相同的。
没有更多的错误信息,我有点难过。关于可能导致错误的原因或获取有关错误的更多信息的方法的建议将不胜感激。
c# - 使用 C# 包装器时的 Matlab 异常
我已经制作了一个在 matlab 中实现的聚类算法的 dll 版本
此外,我下载了输入数据的工作示例(我正在使用玩具问题数据),我正在阅读它并将其转换为 Matlab 已知的数据类型。
但是,在运行算法时出现以下错误:
... MWMCR::EvaluateFunction 错误 ... 连接的矩阵的维度不一致。=> apclusterSparse.m 第 178 行出错。
这是我的代码:(对不起?)
谢谢。
matlab - 独立 matlab 应用程序的“内存不足”错误 - 内存碎片
我必须将应用程序作为独立的 Matlab 可执行文件交付给客户端。该代码包括对内部创建多个元胞数组的函数的一系列调用。
我的问题是,当调用此函数的次数随着用户负载的增加而增加时,就会发生内存不足错误。我猜这是低级内存碎片,因为工作区变量与循环数无关。
如此处所述,退出并重新启动 Matlab 是目前此类内存不足错误的唯一解决方案。
我的问题是,我如何在独立应用程序中实现这样的机制来保存数据,在出现内存不足错误的情况下(或以某种方式预测此类错误的可能性很高时)自行退出并重新启动。
有没有可用的最佳实践?
谢谢。
matlab - 网络位置上的 Visual C++ 运行时
我有一个 MATLAB 可执行文件,我试图在我的公司内部署,但我不希望人们需要安装一堆东西。可执行文件保存到网络位置,我希望他们只运行它。我在网络上设置了 MATLAB 编译器运行时 (MCR),但现在我遇到了 Visual C++ 运行时 (VC++R) 的问题,说应用程序安装不正确。有没有办法将 VC++R 安装到网络位置。(人们没有安装东西的权限,这就是为什么我不想安装 MCR 和 VC++R。)
performance - 为什么我用 matlab 编译的独立应用程序运行速度比从 Matlab 执行时慢得多?
所以,这是我的设置:
- 我有一个带有用 Matlab(2011b 64 位)编写的 GUI 的应用程序。
- 相关的 ?此应用程序调用一个用 VC10 和 nvcc(cuda 编译器)编译的 c++ 编写的 dll。
- 我将 Matlab 配置为在运行“mbuild -setup”时使用 VC10 进行编译。
- 我使用默认设置使用 Matlab 编译器工具箱编译此应用程序。编译行是:
mcc -o ICEM -W main:ICEM -T 链接:exe -d C:\Users\Ernest\Documents\Matlab\icem\ICEM\src -w enable:specified_file_mismatch -w enable:repeated_file -w enable:switch_ignored -w enable :missing_lib_sentinel -w enable:demo_license -v C:\Users\Ernest\Documents\Matlab\icem\Main.m
需要明确的是,问题不在于我的应用程序启动所需的时间。启动需要很长时间,因为它必须加载 MCR,我知道这一点。问题发生在一些涉及计算的显示功能的执行过程中,在我的应用程序的执行过程中,我不明白它如何/为什么会变慢。
你知道这可能来自哪里吗?
c++ - 如何初始化和加载 MCR
我将 MATLAB 生成的 C++ 共享库合并到 Win32 控制台应用程序中。MATLAB 程序在 MATLAB 中执行需要 2-3 秒,但控制台应用程序需要 11-12 秒才能执行。我读到这是因为 MCR 的启动时间,我相信在初始化 MCR 后,它必须花费与 matlab 相同的时间。那么如何加载或初始化 MCR,使其始终位于 RAM 或缓存中,以便控制台应用程序运行需要 2-3 秒?我是否必须制作一个无限循环以便连续加载 MCR?我正在使用 Windows 操作系统,我正在从 PHP 调用控制台应用程序。有任何教程或链接吗?
我已将 MCR_CACHE_ROOT 添加为指向文件夹(不是临时文件夹)的环境变量。我的控制台应用程序代码如下:
我已经评论了上面的行,认为它会使其更快但没有运气。有什么帮助吗?
matlab - 使用工具包的 Mex 或 Compile (mcc) Matlab 函数
环境:
- Matlab R2012a(如有必要,我可以访问其他人)
- 已安装所有工具箱/编译器
- Ubuntu 12.04 64 位和/或 Windows 7 64 位
我正在使用用 Matlab 编写的软件包的源代码(不幸的是,它是专有的,所以没有代码示例……抱歉),其中一个函数简要地使用了控制系统工具箱和信号处理工具箱。
我在我的个人计算机上运行代码没有问题,因为我安装了每个工具箱,但是我想使用这两个工具箱来编译(mex 或 mcc)函数。当然,目标是在没有这些工具箱的机器上运行软件,同时保留剩余代码以供更改。
根据 matlab,他们对您编译使用几乎任何工具箱的代码都没有问题。以下是支持 mcc 编译的工具箱列表:http: //www.mathworks.com/products/compiler/supported/compiler_support.html
问题出现在 mcc 不再允许使用-x
创建函数的 mex-ed 版本的选项进行编译,所以我被迫创建一个 C 可执行文件(也许?希望不是)。这个特殊的函数将大矩阵作为参数(写成命令行参数是不切实际的)并返回单元数组的结构。
解决这个问题的唯一方法(正如我现在所看到的)是将参数(大矩阵)以二进制 .mat 文件的形式写入硬盘驱动器,在参数中读取已编译的 C 二进制文件,运行算法,最后保存另一个 .mat 中的返回值供父线程加载回内存。
这似乎完全不切实际。我将非常感谢其他建议。如果这里有任何不清楚的地方,请告诉我。提前致谢!
[编辑 1] codegen 包不支持tf.m。似乎这应该是可能的(并且曾经可以使用该mex -x
选项),但我很茫然。任何建议将不胜感激!