问题标签 [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.
c - 将 MATLAB 与 C/C++ 程序连接
嗨,我想知道如何将 MATLAB 用作 C 程序的外部求解器。特别是在我的代码中,我希望解决几个 Ax=b 形式的线性系统。
我听说要采用另一种方式,即在 MATLAB 例程中调用 C 函数使用 MEX 文件。但我也不确定如何使用 Mex 文件。
谢谢
matlab - 找不到lg2c
我正在尝试从一些 cpp 和 fortran 文件为 matlab 创建 mex。它们都编译得很好并创建了 .obj 文件。但是在链接过程中我得到错误 lg2c not found。
我在 win vista 中安装了 matlab 2007。我还安装了 mingw 和 gnumex。matlab 中的 mex 设置返回 2 个编译器 lcc 和 VS 2003
我正在使用 G77 fortran 编译器遵循http://www.cs.ubc.ca/~pcarbo/Compile_LBFGSB_on_Windows.txt中的说明
wcf - 访问访问我的 WCF 服务的 WSDL 时出错:“... 操作引用了一个消息元素 ... 已经从 ... 中导出”
在将我的 Web 服务访问到 Web 浏览器时,我遇到了一种奇怪的行为,并且在生成时会导致异常。
这是我的场景:
问题是 WCFService2.svc WSDL 的输出包含与 WCFService2 合并的 WCFService1 的所有定义。
此外,当我访问另一个包含与先前生成的 WSDL 同名的方法的 WSDL 时,我得到了这个异常(肯定是因为我的 WSDL 正在合并在一起)。
我还注意到合同的名称有点奇怪,服务名称前有“:”:http://MyCompany.ca/: IWCFService3
有人知道“WSDL 导出扩展”是怎么回事吗?
可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:
System.InvalidOperationException:在调用 WSDL 导出扩展时引发异常:
System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同: http://MyCompany.ca/: IWCFService3
----> System.InvalidOperationException:MyCompany.IWCFService3.Import 操作引用已从 MyCompany.IWCFService2.Import 操作导出的消息元素 [http://MyCompany.ca/:Import]。您可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性来更改其中一项操作的名称。或者,您可以使用 MessageContract 编程模型更详细地控制元素名称。在 System.ServiceModel.Description.MessageContractExporter.AddElementToSchema(XmlSchemaElement 元素,字符串 elementNs,XmlSchemaSet schemaSet)在 System.ServiceModel.Description.MessageContractExporter.ExportWrappedPart(消息消息,字符串 elementName,字符串 elementNs,XmlSchemaSet schemaSet,
c++ - 如何在单个 Visual Studio 项目中构建多个 .dll 文件(.mexw32 文件)?
我维护一个包含大量 MEX 文件的 Matlab 库。到目前为止,我已经使用 Matlab 脚本构建了该库,但现在我想开始在整个构建过程中使用 Microsoft Visual Studio IDE。按照以下说明,我已经走了很远:
但是,这些说明似乎仅适用于单个 MEX 文件。我遇到的问题是如何在单个 Visual Studio 项目中构建多个 .mexw32 目标(或等效的 .dll 目标)?为 MEX 文件创建单独的项目(在同一解决方案中)不是我急于考虑的选项。这些文件数以百计。
对于那些不熟悉 Matlab 的人来说,MEX 文件是用 C++ 编写的扩展文件,基本上编译成具有特殊扩展名 .mexw32 的 .dll 文件。其中每一个都导出一个入口点void mexFunction(...)
。AFAIK 你不能将这些链接到一个单独的 .dll 中,这是我更愿意做的。
c - 在 Matlab 中为 mex 程序提供更多内存
我的 C mex 编译文件内存不足(更具体地说,我mxMalloc
有时调用 return NULL
)。通过快速计算,我估计我的文件mxMalloc
总共需要大约 500 MB 的内存(可能高达 1 GB),我在 64 位 Linux 机器上运行文件,16 GB 内存几乎完全运行 Matlab。然而,经常mxMalloc
返回。NULL
我想这可能有几个原因(内存碎片等),但无论如何,对于 16 GB 内存的机器来说,500 MB 的要求似乎并不高。
我假设我的调用是mxMalloc
从 Matlab 的堆中请求内存,但不是 100% 确定它(mxMalloc
请求毕竟由 Matlab 处理,而不是由操作系统直接处理)。那么有没有办法增加我的 mex 文件的“堆”大小?
谢谢
matlab - mexGetArrayPtr 未按预期工作
我有以下 test_mex mex 函数:
以及以下 test.m 文件:
- 当我运行它时,它总是失败并打印“oopsie”。
- 当我创建
a
一个全局并将 mex 函数中的“调用者”字符串更改为“全局”时,它工作正常。
我究竟做错了什么?
笔记:
- 这是一个非常古老的 matlab 版本:版本 6.1.0.450 版本 12.1
- mexGetArrayPtr 是 mexGetVariablePtr 的旧版本,是的,它的参数顺序不同
matlab - Matlab 的 MEX 编译期间如何链接
我编写了以下形式的程序:
它可以使用以下命令正确编译、链接和运行:
“gcc44”只是 gcc 4.4 版,之所以这样命名,是因为它是在维护多个 gcc 版本的集群上编译的。sundials_cvode 和 sundials_nvecserial 库用于在构建阵列期间求解多个微分方程。
现在,当我想转移到 Matlab 并尝试编译表单的 mex 文件时:
并尝试在 Matlab 中使用以下命令进行编译:
我收到以下消息,最终导致链接错误:
不知何故,我没有给出正确的标志来正确链接。如果我删除 gcc44 命令中的链接命令,我会得到相同的错误集(加上更多错误),我很确定我没有让编译器“看到”这些库。
我的问题是:
- 如果我对错误的分析是正确的,我需要将哪些标志传递给 mex 编译命令才能成功链接?
- 或者,在 Matlab 环境之外编译和链接以编译 .mex64 可执行文件的 gcc 标志是什么?
- 如果我的分析是错误的,从这里去哪里?
我想我已经排除了不受支持的编译器警告,因为我已经能够使用 gcc 4.4 使用 OpenMP 程序编译简单的 mex,但是这些不需要链接到除了数学库之外的任何东西。此外,如果我使用 gcc 版本 4.1.2 或 4.3.4 进行编译,无论是否带有“-fopenmp”标志,我都会得到相同的错误。
最后,我确实需要 4.4 版,因为某些 OpenMP 支持在以前的版本中没有出现。
在此先感谢您的帮助。
- 安德鲁
编辑:(@KWATFORD)
所以我用引号外的语句尝试了命令,并得到了错误:
我对使用“-fPIC”重新编译的建议有点困惑,因为当我查看 gcc44 命令时,我看到 -fPIC 是一个选项。
他们是说用-fPIC重新编译库吗?
我没有库的源代码,如果建议是重新编译库,是否有解决方法?
“针对本地对象重新定位”是什么意思?
我继续感谢。
wcf - 在 IIS 托管的 WCF 中找不到与方案 HTTPS 错误匹配的基地址
我几乎已将所有东西都设置为通过 https 使用我的 WCF 服务。IIS 应用程序已启动并正在运行,我可以在 localhost 读取 svc 和 wsdl。于是我又回到Visual Studio,尝试写一个可以调用服务的Client。添加 ServiceReference 时出现以下错误:
找不到与绑定 MetadataExchangeHttpsBinding 的终结点的方案 https 匹配的基地址。注册的基地址方案是 [http]。
我已经尝试过使用内置的开发服务器和 IIS Express。他们都给出了同样的错误。
这是我的 web.config:
我究竟做错了什么?
c - Matlab mex 文件比它的直接 C 等效文件慢
我无法解释(并避免)Matlab mex 程序和没有 Matlab 接口的相应 C 程序之间的速度差异。我一直在分析一个数值分析程序:
使用 gcc 4.4 针对 Matlab-Mex 等价物进行编译(直接使用 gcc44,这不是 Matlab 当前支持的版本,但出于其他原因需要它):
我将时间安排为:
对比
时间上的差异是惊人的。从命令行运行的版本平均需要 5.8 秒。Matlab 中的版本运行时间为 21 秒。就上下文而言,mex 文件替换了 SimBiology 工具箱中运行大约 26 秒的算法。
与 Matlab 的算法相比,C 和 mex 版本都使用对 openMP 的调用线性扩展至 27 个线程,但出于分析这些调用的目的,这些调用已被禁用并被注释掉。
除了编译为 mex 文件的必要标志外,这两个版本已以相同的方式编译: -fPIC --shared -lmex -DMATLAB_MEX_FILE 应用于 mex 编译/链接。我已经删除了对 mex 文件左右参数的所有引用。也就是说,它不接受任何输入,也不提供输出,它仅用于分析。
伟大而光荣的谷歌告诉我,与位置无关的代码不应该是减速的根源,除此之外我不知所措。
任何帮助将不胜感激,
安德鲁